在我的主线程中我有一个而(監听)循环,它在我的ServerSocket对象上调用 accept() 然后启动一个新的客户端线程,并在接受新客户端时将其添加到Collection
我还有一个Admin线程,我想用它来發出命令比如'exit',这将导致所有客户端线程被关闭关闭自己并关闭主线程,通过转向监听false
但是, accept()调用 while(监听)循环块似乎没有任何中断它的方法,因此无法再次检查while条件程序无法退出!
有更好的方法吗?或者某种方式来中断阻塞方法
你可以调用 来自另一个人線程和 调用将抛出 。
1:抛异常就抛呗你catch住不就行了。
2:如果你能确定哪个是最后一个client让client给它发给停止消息,让他不再继续accept
确定不了……
而且如果一个客户端都没连接就要关闭的情况,鼡您的方法显然不能解决……
什么意思你到底有什么需求,你打算什么时候关闭
对于可预见性的异常抛出处理这种方式应该没什么问題
ServerSocket不是一上去就开始执行accept()然后阻塞在accept()处了嘛,然后我关闭服务器但是此时还没有Client连接上,如果在别的地方调用close()由于另一個线程还在accept()所以会抛出异常吧?
本回答被提问者和网友采纳
你对这个回答的评价是
该楼层疑似违规已被系统折叠
但問题是如果我程序要退出了就算把running设为false,accept也会卡在那里所以必须再接受一次连接程序才能退出。
如果我退出时直接关闭ServerSocket比如serverSocket.close()那么程序是可以马上结束,但是accept会抛异常结果就是每次结束程序都有异常。