java - 如何停止这种线程?

标签 java multithreading

我有一个线程有这段代码

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 将捕获该异常(SocketExceptionIOException 的子类)并且将执行 while 语句中的检查,然后会注意到 isInterrupted() 标志被设置并退出。

与目前接受的解决方案相反,它将立即退出,而不是等待最多 10 秒。

关于java - 如何停止这种线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22688692/

相关文章:

java - 扫描程序是否应该仅实例化一次?如果是这样的话,为什么呢?

c++ - FAST DMA 受益于在 C++ 中使用线程的 FPGA

c++ - 将方法作为参数传递给另一个方法,该方法本身将传递的方法传递给标准线程

c# - 在四核上使用线程可将代码速度提高 65%?

Java删除ZipEntry

Java:WeakReference.get() 在 System.gc() 之后返回不同

java - 项目 'PrjName' 缺少所需的库 : 'libs/android-viewbadger.jar' PrjName

java - 从多个线程修改数组

C++ 线程 : what does join do exactly?

java - 在哪个线程池affinityRun提交任务?如何配置线程数?