gpt4 book ai didi

java - 如何停止线程中的 block 方法 DatagramSocket.receive()

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:41 25 4
gpt4 key购买 nike

我在主线程中创建一个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();
}
}
}
}

我想在关闭 DatagramSocket 之前停止内部类线程,但不推荐使用 stop() 方法。我该怎么做?

最佳答案

关闭套接字,这将停止 receive() 调用的阻塞。如果您首先设置一个关闭标志,然后在 catch (IOException) block 中,如果设置了该标志,您可以安全地忽略异常。 (您也可以在 DatagramSocket 上使用 isClosed() 方法而不是标志)

关于java - 如何停止线程中的 block 方法 DatagramSocket.receive(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7962121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com