通常スレッドは start で実行されるが、何気に 直接 run メソッドを実行してスレッドと思わせるような問題があるかもしれない。 run() を直接実行した場合は新たに別スレッドで実行されることはなく、現在の単一スレッドでそのまま実行される。これは他の一般メソッドと同じ流れになる。
[DirectRun.java]
/**
* hread.run の直接実行(引掛け) テストクラス
*/
public class DirectRun extends Thread {
public static void main(String[] args) {
DirectRun dr1 = new DirectRun();
// 通常は start でスレッドとして実行するが
// 何気に run を実行してスレッドと思わせるような
// 問題に注意。通常は start() で実行
dr1.run();
for(int i = 0; i < 10; i++) {
System.out.println("main + " + i);
}
}
public void run() {
for(int i = 0; i < 10; i++) {
System.out.println("run + " + i);
}
}
}
実行結果
run + 0
run + 1
run + 2
run + 3
run + 4
run + 5
run + 6
run + 7
run + 8
run + 9
main + 0
main + 1
main + 2
main + 3
main + 4
main + 5
main + 6
main + 7
main + 8
main + 9