1

エグゼキュータのスレッドを中断する正しい方法は? 私はこれを持っています:メソッドを持つWorkerという名前のスレッドクラス:

public void run() {
    while(!(Thread.currentThread().isInterrupted()){
        System.out.println("work " + Thread.currentThread().getName() + ":" + Thread.currentThread().isInterrupted());
    }
}

そしてメインクラス:

ExecutorService executorService = Executors.newFixedThreadPool(threadCount);
Worker worker = new Worker();                   
executorService.execute(worker);  

worker.interrupt();orを呼び出そうとしましexecutorService.shutdownNow();たが、スレッドが続行し、isInterrupted() が false です。

4

1 に答える 1

1

関連するすべてのコードを投稿できますか? あなたが提供した情報に基づいて、あなたが説明した動作を再現できません。期待どおりに動作するSSCCEの下を参照してください- 出力:

work pool-1-thread-1:false
work pool-1-thread-1:false
work pool-1-thread-1:false
....
スレッドが中断されました

コード:

public class Test {

    public static void main(String[] args) throws InterruptedException {
        ExecutorService executorService = Executors.newFixedThreadPool(1);
        Worker worker = new Worker();
        executorService.execute(worker);
        executorService.shutdownNow();
    }

    public static class Worker extends Thread {

        public void run() {
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("work " + Thread.currentThread().getName() + ":" + Thread.currentThread().isInterrupted());
            }
            System.out.println("Thread has been interrupted");
        }
    }
}
于 2012-06-24T08:59:50.490 に答える