Thread.sleep メソッドはstatic
Thread.sleep メソッドは static なメソッドしか存在しない。そのため常にカレントスレッド(sleep を実行したスレッド)が停止する。
Thread を継承したクラスインスタンスを利用して
class Thread1 extends Thread { public void run(){}};
......
Thread1 t1 = new Thread1();
t1.sleep(1000);
という記述が可能になるが、t1スレッドに対しては何も影響がない。
混乱を避けるため、sleepメソッドは常に Thread.sleep と記述して static メソッドであることを強調するのも1つの手だ。
試験ではこの辺に引っかからないように注意する。
[ThreadSleep.java]
/**
* Thread.sleep メソッドはstatic テストクラス
*/
public class ThreadSleep {
Thread t1, t2;
public static void main(String[] args) {
ThreadSleep ts = new ThreadSleep();
ts.t1 = ts.new Thread1();
ts.t2 = ts.new Thread2();
ts.t1.start();
ts.t2.start();
}
class Thread1 extends Thread {
public void run() {
try {
// t2 スレッドに対する処理ではなく
// カレントスレッドを3秒間停止する。
// これは Thread.sleep(), sleep() と全く同じ
// そのため Thread2 が先に終了する
t2.sleep(3000);
} catch(InterruptedException e) {}
System.out.println("Thread1 end");
}
}
class Thread2 extends Thread {
public void run() {
try {
sleep(1000);
} catch(InterruptedException e) {}
System.out.println("Thread2 end");
}
}
}