次のコードがあります。
public class ThreadTest implements Runnable {
public int ThrCount = 0;
public void ThrCountIncr() {
while (true) {
ThrCount++;
System.out.println(ThrCount);
try {
Thread.currentThread().sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void run() {
while (true) {
if (ThrCount > 10) {
System.out.println(ThrCount + "\n Thread finished");
System.exit(1);
}
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
しかし、この行を から削除するとrun
、動作しなくなります:
Thread.currentThread().sleep(100);
まず、スレッドを開始し、次に を使用しますThrCountIncr
。
ThreadTest Thrtest = new ThreadTest();
Thread thr = new Thread(Thrtest);
thr.start();
Thrtest.ThrCountIncr();
スレッドはThrCount
変数値をチェックし、10 より大きい場合はプログラムを停止します。がないsleep(100)
と、スレッドはプログラムを停止せず、変数の値をチェックしないと思います。sleep
このコードを実行するための呼び出しが機能するのはなぜですか?