clo*_*oud 10 java sockets multithreading
我DatagramSocket在主线程中创建一个,然后创建一个内部类线程来监听端口.当我DatagramSocket在主线程中关闭时,它总是遇到错误,socket closed因为在内部类线程中我调用了receive()方法,并且它阻塞了内部类线程.这是内部类的代码:
class ReceiveText extends Thread
{
@Override
public void run()
{
while(true)
{
byte[] buffer = new byte[1024];
DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
try {
udpSocket.receive(dp);//blocked here
byte[] data = dp.getData();
String message = new String(data, 0 , dp.getLength());
setTxtAreaShowMessage(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想在关闭DatagramSocket之前停止内部类线程,但stop()不推荐使用该方法.我怎样才能做到这一点?
pru*_*nge 14
关闭套接字,这将阻止来自阻塞的receive()调用.如果首先设置一个关闭标志,那么在catch(IOException)块中,如果设置了标志,则可以安全地忽略该异常.(您可能也可以在DatagramSocket上使用isClosed()方法而不是标志)