gpt4 book ai didi

Java:将数据从一个线程传送到另一个线程

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:31:57 25 4
gpt4 key购买 nike

我正致力于创建一个基于 UDP 的聊天客户端。主要结构是有一个服务器,客户端在这里注册,客户端也可以请求与另一个注册到服务器的客户端建立连接。客户端使用伪代码结构如下:

public UDPClient() {
// Create datagram socket

// Execute RECEIVE thread using datagram socket above
// Execute SEND thread using datagram socket above
}

我的想法是让发送和接收在不同的线程上执行,这样我就不会在接收时阻塞 I/O。这两个线程在它们的运行方法中都有循环,允许您不断地发送和接收消息。我的问题是这个。如果一条消息进入 RECEIVE 线程,改变了我的 SEND 应该如何执行,我如何将它传达给 SEND 线程?我是否必须向自己发送一个数据报,或者我能否以某种方式在代码中传达它?

最佳答案

假设两个线程彼此没有引用,创建第三个 singleton类,读取/发送线程(类)引用,具有 volatile 成员字段来存储您想要共享的状态数据,并且具有 synchronized 访问权限。

volatile 关键字与同步访问相结合,保证一个线程对字段所做的更改将被另一个线程看到。否则,由于 Java 内存模型规范,更改可能不可见。

编辑:

遵循“关注点分离”设计指南,最好让读取/发送线程相互了解并使用第三方来协调它们的 Activity/行为。将方法添加到您的读取/发送类 stop()start() 等,并从其他类调用这些方法。

使用单独的类还可以:

  • 通过其他方式控制行为,例如管理网页上的“停止发送”按钮
  • 允许每种类型的多个线程,但仍然可以通过一个中心点进行适当的控制,也许可以使用这样的线程池(如果没有单独的类,您将遇到多对多的噩梦和大量没有任何内容的代码处理手头的工作:即结束和接收)
  • 更容易测试您的 worker 类(Class),因为他们做的更少而且更专注
  • 将它们独立移植/嵌入以用于其他用途

关于Java:将数据从一个线程传送到另一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12864264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com