停止无限循环Runnable从ThreadPool运行

chz*_*gla 2 java multithreading threadpool

我有一个Runnable实现类,它将从Executors.newFixedThreadPool Inside 运行Runnable,我有一个无限循环运行,它在UDP端口上侦听传入数据.

我想优雅地结束Runnable以关闭所述UDP端口.

我怎样才能做到这一点?Thread直接扩展时,我可以访问interrupt()和isInterupted()等,我可以在其中建立无限循环.

Runnable然而,在实施课中,我想做类似的事情

@Override
public void run() {
    while (active) {

    }
}
Run Code Online (Sandbox Code Playgroud)

并有

private boolean active = true;
Run Code Online (Sandbox Code Playgroud)

ThreadPool终止后如何设置active = false?

Phi*_*art 8

您可以使用静态方法访问当前线程的中断标志 Thread.interrupted(),例如,而不是active使用您的标志:

public void run() {
    try {
        // open your ports
        while (!Thread.interrupted()) {
            // do stuff
        }
    } finally {
        // close your ports in finally-block
        // so they get closed even on exceptions
    }
}
Run Code Online (Sandbox Code Playgroud)

当你想关闭你的时候ExecutorService,请打电话shutdownNow().这将是interrupt()任何正在运行的工作线程,并让你Runnable摆脱它的循环.