public static void main(String[] args) {
Thread thread01 = new Thread(() -> {
for (int i = 0; i < 10; ++i) {
System.out.println(Thread.currentThread().getName() + ".........i=" + i);
}
}, "thread01");
thread01.start();
for (int i = 0; i <10 ; ++i) {
System.out.println(Thread.currentThread().getName() + "....j=" + i);
}
最近在看多執行緒.執行一上代碼發現一個問題:thread01不一定會列印10次.求問原因?難道主執行緒會影響子執行緒嗎
uj5u.com熱心網友回復:
main....j=0main....j=1
main....j=2
main....j=3
main....j=4
main....j=5
main....j=6
main....j=7
main....j=8
main....j=9
thread01.........i=0
thread01.........i=1
thread01.........i=2
thread01.........i=3
運行結果
uj5u.com熱心網友回復:
你這個多執行緒為什么沒有run()方法去運行
uj5u.com熱心網友回復:
不是只有一個執行緒嗎?
uj5u.com熱心網友回復:
除了main執行緒uj5u.com熱心網友回復:
主執行緒都跑完了, 程式結束了,肯定看不到, 用thread01.join()是等待執行完uj5u.com熱心網友回復:
你這應該是IDE造成的誤解,輸出到控制臺也是有延遲的,程式只是輸出到控制臺,IDE控制的控制臺是在程式結束后立刻關閉,可能是還沒來得及顯示程式就退出了造成了這個錯覺。你可以給執行緒1加上延遲,看看:
Thread thread01 = new Thread(() -> {
for (int i = 0; i < 10; ++i) {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ".........i=" + i);
}
}, "thread01");
thread01.start();
for (int i = 0; i < 10; ++i) {
System.out.println(Thread.currentThread().getName() + "....j=" + i);
}
uj5u.com熱心網友回復:
程式應該沒問題,但是你的運行結果是有問題的,我測驗是正常到9結束的,不知道你怎么得出的結果。
uj5u.com熱心網友回復:
參考下五樓說的再問下度娘,關鍵詞:守護執行緒,還可以問問 join
uj5u.com熱心網友回復:
樓主創建的不是守護執行緒,本來就不會隨主執行緒的結束而結束。我無論idea還是用cmd來運行你的代碼都不會有問題,估計真的是6樓說的原因,你的idea出問題了
uj5u.com熱心網友回復:
咱這邊建議換個電腦uj5u.com熱心網友回復:
thread0的優先級不夠唄,主執行緒都跑完了,子執行緒還沒結束。然而,主執行緒結束也會強制子執行緒一起退出。你可以加個鎖,主執行緒上wait();
public static void main(String[] args) {
Object locker = new Object();
Thread thread01 = new Thread(() -> {
synchronized (locker) {
for (int i = 0; i < 10; ++i) {
System.out.println(Thread.currentThread().getName() + ".........i=" + i);
}
locker.notify();
}
}, "thread01");
thread01.start();
for (int i = 0; i < 10; ++i) {
System.out.println(Thread.currentThread().getName() + "....j=" + i);
}
try {
synchronized (locker) {
locker.wait();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
uj5u.com熱心網友回復:
把子執行緒設定為守護執行緒才會出現樓主說的情況,就是 Thread 有一對非靜態方法 boolean isDaemon() / setDaemon(boolean)uj5u.com熱心網友回復:
可能是ide控制臺列印的問題,你在子執行緒start后讓主執行緒sleep一會再結束看一下結果uj5u.com熱心網友回復:
主執行緒都死了,thread01就會隨之消亡,解決辦法?(1)可以讓主執行緒等待
(2)以守護執行緒方式運行
這樣就可以列印出你想要的結果。
uj5u.com熱心網友回復:
可能是idea列印結果的問題,使用你的代碼在eclipse上可以運行處完整的thread01的0-9結果轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/15990.html
標籤:Java SE
上一篇:activiti7求教
