我有一个线程有这段代码
while(!this.isInterrupted()) {
try {
socket = server.accept();
}
catch(IOException e) {
continue;
}
}
当我从某处调用中断方法时,只有在检查条件时它才会停止执行。如果程序在 server.accept() 语句怎么办?它不会停止,直到任何请求来自任何套接字。我希望当我调用中断方法时,它应该立即停止。这个问题有什么解决办法吗?
最佳答案
像这样重写线程中的 interrupt()
方法:
@Override
public void interrupt() {
super.interrupt();
socket.close();
}
当另一个线程中断该线程时,套接字将关闭。当线程当前在 accept()
中时,accept 将通过抛出 SocketException
立即退出。您的 catch block 将捕获该异常(SocketException
是 IOException
的子类)并且将执行 while 语句中的检查,然后会注意到 isInterrupted()
标志被设置并退出。
与目前接受的解决方案相反,它将立即退出,而不是等待最多 10 秒。
关于java - 如何停止这种线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22688692/