gpt4 book ai didi

java - 如何结束处理套接字连接的线程?

转载 作者:行者123 更新时间:2023-12-03 11:50:31 25 4
gpt4 key购买 nike

我有一个处理套接字连接的线程:

BufferedReader socketInput = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
while (true)
{
String line = socketInput.readLine();
// do stuff
}

正如我在此站点上的一些答案中所读到的,推荐的解决方案是使用一个线程设置的标志,我的(套接字处理)线程在该标志更改状态时检查并终止自身。像这样的东西:

while (!done)
{
String line = socketInput.readLine();
// do stuff
}

但是当 readLine() 仍在等待输入时,这可能会卡住。我想我可以设置超时:

mySocket.setSoTimeout(100);
while (!done)
{
String line = socketInput.readLine();
// do stuff
}

这可能会起作用,但在我的线程“意识到”标志的状态已更改之前,我仍然会延迟 100 毫秒。

有没有办法让线程立即“意识到”它应该结束?如果不是,我的解决方案(带有超时和标记 done)是否正确?

编辑:我已经阐明 socketInputBufferedReader 类型(或者我正在考虑 Scanner)。

最佳答案

最常见的处理方法是关闭来自其他线程的套接字。这将导致读取方解除阻塞并退出,并出现(预期的)错误,即套接字已关闭。根据您可用的套接字 API,也可能只关闭读取端。简单看一下 JDK shutdownInput() 可能会起作用。

但是,如果您稍后想继续从套接字中读取,这些显然将不起作用。您的解决方案应该在那里工作,但在性能和 react 性方面显然更差,因为您基本上轮询套接字所有 100 毫秒。

关于java - 如何结束处理套接字连接的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41408263/

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