可能性の重複:How do you kill a thread in Java?長いタスクをしているループの中にあるときにスレッドを中断する方法は?
私がスレッドに割り込み信号を送信することにより、いくつかの大きな課題をやって停止する必要があります。 java.util.concurrent。*のほとんどのAPIを使用しています。私の仕事はスレッドに送られて実行されます。この作業はクライアントから行われるので、そのコードを制御することはできません。私は基本的には、割り込み信号を受信したときに(私は内部Thread.interrputed()のロジックを置くことはできませんのでご注意下さいforループをループ停止したい
public class Task1 extends Thread {
public void run() {
while(true){
if(Thread.interrupted()){
return;
}
for(int i=0; i<Integer.MAX_VALUE; i++){
System.out.println("I am task 1 " + i);
}
}
}
};
:
タスクに似たものですクライアントから来るので-loop)このタスクを実行するためにExecutorを使用する別のクラスがあります。
public class ConcurrentTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
ConcurrentTest test = new ConcurrentTest();
ExecutorService executorService = Executors.newFixedThreadPool(2);
Task1 task1 = new Task1();
Future<?> runningTask1 = executorService.submit(task1);
Task2 task2 = new Task2();
Future<?> runningTask2 = executorService.submit(task2);
//Stop First task after 5 second
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
runningTask1.cancel(Boolean.TRUE);
System.out.println("runningTask1.isDone is " + runningTask1.isDone());
System.out.println("runningTask1.isCancelled is " + runningTask1.isCancelled());
//Stop Second task after 10 second
try{
TimeUnit.SECONDS.sleep(3);
}catch(InterruptedException e){
e.printStackTrace();
}
runningTask2.cancel(Boolean.TRUE);
System.out.println("runningTask2.isDone is " + runningTask2.isDone());
System.out.println("runningTask2.isCancelled is " + runningTask2.isCancelled());
}
}
Task2のは、次のとおり
public class Task2 extends Thread{
public void run() {
while(true){
if(Thread.interrupted()){
return;
}
System.out.println("I am task 2");
}
}
};
Task2のがinterrptedさしかしながらタスク1が中断決してとforループ内の実行を続けます。私はクライアントコードの中に何らかのロジックを置くことができません(for-loopに似たもの)。私はこの問題を解決するためにSOコミュニティからの助けが必要です。ありがとう。
スレッド1のforループにThread.interruptedのチェックを入れることができない理由を教えてください。 – RossFabricant