有人可以解釋爲什麼執行後輸出這個程序是如此不同?Java 6線程 - 與「實現Runnable」和「擴展線程」不同的行爲
首先,類別: 線程擴展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,在第二種情況下不運行runnable?
我想你誤解了這個問題。 OP有意在兩個線程上調用'run'。他只是想知道,爲什麼'run'方法只在'threadB'而不在'threadA'中執行。看到輸出。 –