【发布时间】:2014-01-08 04:58:02
【问题描述】:
在一个多线程应用程序中,我有一个线程:
datagramSocket.receive(packet);
等待数据包 - 使用 receive 方法阻止执行。 与此同时,其他一些线程想要关闭这个“等待”的线程。
我怎样才能做到这一点?
目前我只是关闭导致 SocketException 抛出的套接字,我认为这不是最好的主意...
有什么帮助吗?
【问题讨论】:
-
您可以在
DatagramSocket中设置超时,也可以向Thread发出中断。 -
这不是一个坏主意 - 它比您将获得的浪费、延迟缠身的超时解决方案要好。另一个无浪费、无延迟的解决方案是设置一个“终止”易失性标志并向 UDP 线程发送一个空数据报,因此让 receive() 调用返回,以便它可以检查标志并终止。
-
..或者甚至在您使用的任何消息协议中发送“请关闭”数据报。
-
@MartinJames 除了它是 UDP 并且发件人永远不会知道它的消息是否真的到达
-
@Raffaele - 在本地堆栈上?我怀疑它会丢失。
标签: java android multithreading udp