class A implements Runnable {
static int b = 10;
public void run() {
m1();
}
public synchronized void m1() {
b = 100;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(b);
}
public synchronized void m2() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
b = 200;
System.out.println(b + "m2");
}
public static void main(String[] args) {
A aa = new A();
Thread tt = new Thread(aa);
tt.start();
aa.m2();
}
}
-1
A
回答
0
因爲當你在做.start()時,線程將被調度執行。雖然對aa.m2()的調用正在執行,並且會更快(大部分時間)。
0
在aa.m2
主線程將直接調用m2
方法,所以它將是第一個被執行的,因爲tt
需要很少的時間來初始化和啓動。 m2
方法是同步的,所以它會獲得對象的鎖定aa
,那麼當線程tt
完成初始化時它會調用m1
方法並等待鎖定對象aa
被釋放(m1
方法也同步)。
+0
非常感謝。我總是混淆線程和它很難理解。 – Whattime
相關問題
- 1. 爲什麼結果是NaN?
- 2. 爲什麼WifiInfo.getRssi()總是返回-200?
- 3. 爲什麼合不stream.reduce援引雖然結果是正確的
- 4. 爲什麼活動結果代碼是不同的,然後我期望
- 5. 什麼是控制結構「如果真的,然後返回」被稱爲?
- 6. 是否如果x/100 = Int(x/100)然後ActiveWorkbook.Save OR如果x/100 = Int(x)那麼ActiveWorkbook.save?
- 7. 什麼是distanceBetween結果的結果聯
- 8. 爲什麼結果都是5?
- 9. 爲什麼2 + 1&0結果是0?
- 10. 爲什麼不是標量的結果?
- 11. 爲什麼結果是Hello World?
- 12. C++ - 爲什麼結果是負的?
- 13. 爲什麼〜真的結果是-2?
- 14. 什麼是XSLT結果樹
- 15. 什麼是動作結果?
- 16. 當在Python中使用ta-lib時,諸如-100,+100,-200,+200等數字是什麼?
- 17. varchar的後果是什麼?
- 18. 增加後結果應該是11,爲什麼?
- 19. Gprof結果:什麼是「alloc_mmap」?是
- 20. 爲什麼不是頁腳100%寬度?
- 21. 爲什麼這不是100%的高度?
- 22. 爲什麼身高不是100%?
- 23. 爲什麼FindWindow()不是100%可靠?
- 24. 爲什麼在Angular返回荒謬的結果鏈接`然後`?
- 25. 爲什麼TCL MD5:MD5結果是的md5sum結果的不同
- 26. CSS:100%字體大小 - 100%是什麼?
- 27. 什麼是「允許」的必然動作/結果的方法
- 28. 什麼是0050和爲什麼回聲0050結果40
- 29. 這些類型轉換的結果是什麼?爲什麼?
- 30. 這段代碼段的輸出結果是什麼?爲什麼?
爲什麼你認爲它應該是100,然後是200(儘管有時可能)? – SMA
它讓我感到這個問題得到了贊成票。 – Raedwald