在我的主线程中,我有一个while(listening)
循环,它在我的ServerSocket
对象上调用accept()
,然后启动一个新的客户机线程,并在新的客户机被接受时将其添加到集合中。
我还有一个管理线程,我想用它来发出命令,比如'exit'
,这将导致所有客户端线程关闭,关闭自身,并通过将侦听设置为false来关闭主线程。
但是,while(listening)
循环中的accept()
调用阻塞,似乎没有任何方法可以中断它,因此无法再次检查while条件,程序也无法退出!
有没有更好的方法来做这件事?或者以某种方式中断阻塞方法?
发布于 2010-06-06 18:27:31
您可以从另一个线程调用close()
,accept()
调用将抛出一个SocketException
。
发布于 2018-02-21 00:11:35
发布于 2013-12-02 07:06:20
你可以尝试的另一件更干净的事情是检查接受循环中的一个标志,然后当你的管理线程想要终止在接受时阻塞的线程时,设置该标志(使其线程安全),然后建立到侦听套接字的客户端套接字连接。accept将停止阻塞并返回新的套接字。您可以制定一些简单的协议,告诉侦听线程干净地退出线程。然后在客户端关闭套接字。没有例外,干净多了。
https://stackoverflow.com/questions/2983835
复制相似问题