我有一个阻塞UDP数据包的线程,我需要能够在接收超时发生之前告诉它忘记该数据包并做其他事情。有没有办法做到这一点?
答案 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()。