我的一个Runnable运行代码:
while(true) {}
我尝试在Executor apis中包装Runnable,然后尝试关闭方法。试过thread.interrupt。但没有任何作用。我无法修改Runnable代码。任何建议......
答案 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()) {}
}