我可以唤醒因为调用DatagramSocket.receive()而阻塞的线程吗?

时间:2011-02-27 17:21:05

标签: java network-programming

我有一个阻塞UDP数据包的线程,我需要能够在接收超时发生之前告诉它忘记该数据包并做其他事情。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:3)

使用DatagramChannel读取您的UDP数据包,并中断读取线程。根据Thread.interrupt(和DatagramChannel)的文档,读操作将抛出ClosedByInterruptException。

答案 1 :(得分:2)

JB发布了解决方案的一部分。但是如果您没有使用NIO通道,那么解决方案AFAIK就是关闭套接字并在runnable / callable中同样处理它。 I did something similar一段时间使用TCP套接字,如果您感兴趣的话。解决方案的可行性再次取决于关闭插座是否可以接受。在这种情况下,使用NIO解决方案会更有意义。

答案 2 :(得分:0)

设置一个更短的读取超时,让read方法在考虑读取超时之前循环正确的次数。在其他(n-1)个案例中,它检查Thread.isInterrupted()。