所以想象一下有一個類 A 實現了 Runnable ,如下所示:class A implements Runnable { C c; Thread t; public A(C c){ this.c = c; t = new Thread(this); } public void start(){ t.start(); } public void run(){ for (int i = 0; i < 5; i++){ c.doIt(); } }}C 類只包含一個同步方法,該方法按字符打印當前線程詳細信息,如下所示:class C { synchronized void doIt(){ String s = Thread.currentThread().toString(); for (int i = 0; i < s.length(); i++) { System.out.print(s.charAt(i)); } System.out.println(); }}如果我在主方法中創建 2 個線程,同時使用 C 類的共享對象 c,我不應該收到線程執行的隨機順序,因為只有 doIt 方法是同步的嗎?我想象的方式是,在 t1 完成 doIt() 迭代后,t2 線程將能夠接收控制。似乎鎖是由 t1 獲取的,直到線程的整個循環完成它的工作。所以我的問題是 - 同步是否意味著線程也必須在另一個線程開始之前完成(不僅是 doIt() 的同步)?
線程同步和執行順序
慕尼黑5688855
2021-06-28 20:03:10