如何在不使用Thread.stop的情况下终止空的无限循环线程

时间:2014-03-01 16:39:27

标签: multithreading infinite-loop interrupt executorservice

我的一个Runnable运行代码:

while(true) {}

我尝试在Executor apis中包装Runnable,然后尝试关闭方法。试过thread.interrupt。但没有任何作用。我无法修改Runnable代码。任何建议......

1 个答案:

答案 0 :(得分:1)

检查其中断标志:

while (!Thread.currentThread().isInterrupted()) {}

大多数执行程序在shutdownNow上中断工作线程,因此这为您提供了一个干净关闭的整洁机制。

如果您需要在Runnable的上下文之外终止Executor,则需要为其设置一个设置标记的shutdown方法。

final AtomicBoolean isShutdown = new AtomicBoolean();
public void shutdown() {
    if (!isShutdown.compareAndSet(false, true)) {
        throw new IllegalStateException();
    }
}

@Override
public void run() {
    while (!Thread.currentThread().isInterrupted() && !isShutdown.get()) {}
}