スレッドの割り込みと、停止を呼び出さずにスレッドを終了させる方法を学習しようとしています。
public class Test implements Runnable{
static Thread threadTest=null;
public static void main(String args[]){
System.out.println("Hello i am main thread");
Test thread= new Test();
threadTest= new Thread(thread);
threadTest.start();
}
private static void exitThread() {
threadTest.interrupt();
}
@Override
public void run() {
boolean run = true;
while (run) {
try {
System.out.println("Sleeping");
Thread.sleep((long) 10000);
exitThread();
System.out.println("Processing");
} catch (InterruptedException e) {
run = false;
}
}
}
}
出力
Hello i am main thread
Sleeping
Processing
Sleeping
Sleeping が 2 回目に出力され、中断された例外が 1 回目ではなく 2 回目にスローされる理由を理解できません。java でスレッドを停止するために volatile キーワードが使用されている投稿を確認しましたが、それがどのように使用されるのか理解できません。このシナリオでは、スレッドが割り込みで停止するためです。