在多线程环境中使用的UDP Socket.receive()方法

时间:2012-04-15 08:12:37

标签: java multithreading udp

我一直在寻找这些信息,在其他地方找不到它: 我正在构建一个带有服务器和固定数量客户端的多人游戏。 我们的客户端是多线程的(一个用于游戏逻辑和可视化的线程,一个用于接收消息的线程),并且可以异步地从服务器接收消息。 使用UDP实现通信。

如果前一个线程调用socket.receive()方法,而后一个线程通过一个使用socket.receive()的循环,会发生什么?

更具体地说,如果消息从服务器到达并且两个线程同时等待接收,则是否收到两个线程的消息? 如果没有,是否定义了哪个线程将接收数据包?

请注意,两个线程都使用相同的套接字。

2 个答案:

答案 0 :(得分:1)

我不知道,但是我只是首先避免出现这种情况。

你说第一个线程是用于游戏逻辑和可视化,第二个线程用于接收消息 - 那么为什么第一个线程会调用socket.receive()?这不是它的工作,如果要展示的话,它当然应该是阻止的。

拥有一个用于接收消息的专用线程听起来对我来说是一个非常合理的想法 - 所以坚持这个计划而不是在两个线程之间混淆责任。

答案 1 :(得分:0)

第一个线程接收消息一次,以进入receive()方法。

在幕后,这是通过PlainSocketImpl.receive()同步这一事实来实现的。