Java 如何中断线程等待接收udp数据包?
我有以下代码:Java 如何中断线程等待接收udp数据包?,java,multithreading,udp,packet,Java,Multithreading,Udp,Packet,我有以下代码: public class ServerConnectionListener implements Runnable { DatagramSocket receiveSocket; DatagramPacket receivePacket; /* Some Initilization here in the constructor // // */ @Override public void
public class ServerConnectionListener implements Runnable {
DatagramSocket receiveSocket;
DatagramPacket receivePacket;
/*
Some Initilization here in the constructor
//
//
*/
@Override
public void run()
{
try {
System.out.println("Waiting..."); // so we know we're waiting
receiveSocket.receive(receivePacket);
} catch (IOException e)
{
System.out.print("IO Exception: likely:");
e.printStackTrace();
System.exit(1);
}
//Some more stuff to be done here
}
}
我知道receiveSocket.receive()是一个阻塞调用。因此,我希望使用Thread.currentThread().isInterrupted()的方式,使我可以中断此线程,而无需再等待数据包被接收。您无法安全地中断套接字接收上阻塞的线程 实现这一点的简单方法是设置一个合理的超时值(
DatagramSocket.setSoTimeout(int毫秒)
),即1秒,并检查每个SocketTimeoutException
上的中断标志
一个更好但更复杂的解决方案(从编码的角度来看)是使用
java.nio.channels
的功能,您可以从另一个线程关闭套接字。这将导致receive
引发异常。是的,这肯定会起作用:)。但是假设另一个线程没有socket的引用。在这种情况下,我能做些什么吗?将close
方法放入ServerConnectionListener