誰かが私にこのプログラムの実行後の出力がとても異なる理由を説明できますか?
まず第一に、クラス:java.lang.Threadを拡張するスレッド
public class UsingThreadExtension extends Thread {
public UsingThreadExtension(String s) {
super(s);
}
@Override
public void run() {
for (int i=0; i<5; i++) {
System.out.println(i + " " + Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
java.lang.Runnableの実装:
public class UsingRunnableImplementation implements Runnable {
@Override
public void run() {
for (int i=0; i<5; i++) {
System.out.println(i + " " + Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
そしてメインクラス:
public class ThreadsExample {
public static void main(String[] args) {
UsingThreadExtension threadA = new UsingThreadExtension("Thread A");
UsingRunnableImplementation runnableImplementation = new UsingRunnableImplementation();
Thread threadB = new Thread(runnableImplementation, "Thread B");
//threadA.start();
threadB.start();
try {
//threadA.join();
threadB.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
//threadA.run();
threadB.run();
System.out.println("Main thread says hello!");
}
}
この組み合わせでは、出力は次のようになります。
0 Thread B
1 Thread B
2 Thread B
3 Thread B
4 Thread B
Main thread says hello!
そして、threadBの部分にコメントを付け、threadAのコメントを外した後、次のようなものがあります。
0 Thread A
1 Thread A
2 Thread A
3 Thread A
4 Thread A
0 main
1 main
2 main
3 main
4 main
Main thread says hello!
誰かが私に言うことができます、正確にそのような違いを引き起こすのは何ですか?ヒントをいただければ幸いです。私はそれがthreadAのjava.lang.Thread.run()メソッドのオーバーライドに関連していると思いますが、なぜthreadBは2番目のケースで実行可能に実行されないのですか?