package sync.method;class PrintCH { ? ?public static void print(char c) { ? ? ? ?for (int i = 0; i < 4; i++) { ? ? ? ? ? ?System.out.print(c); ? ? ? ? ? ?try { ? ? ? ? ? ? ? ?Thread.sleep(1000); ? ? ? ? ? ?} catch (InterruptedException e) { ? ? ? ? ? ? ? ?e.printStackTrace(); ? ? ? ? ? ?} ? ? ? ?} ? ?}}public class SyncMassExample extends Thread { ? ?public char c; ? ?public /*static*/ PrintCH printCH = new PrintCH();? ? /// ? ?public SyncMassExample(char c) { ? ? ? ?this.c = c; ? ?} ? ?public void run() { ? ? ? ?synchronized (printCH) { ? ? ? ? ? ?PrintCH.print(c); ? ? ? ?} ? ?} ? ?public static void main(String[] args) { ? ? ? ?SyncMassExample s1 = new SyncMassExample('a'); ? ? ? ?SyncMassExample s2 = new SyncMassExample('b'); ? ? ? ?s1.start(); ? ? ? ?s2.start(); ? ?}}為什么同步代碼塊后的對象的應用得是靜態的? 就是我注釋的那里? 去掉static關鍵字 輸出內容就亂了 交替輸出a b
1 回答

習慣受傷
TA貢獻885條經驗 獲得超1144個贊
在這里 synchronized 關鍵字多余,你這是兩個線程輸出,s1線程和s2線程是開始執行時間不不一定,所以會亂。你應該讓兩個線程join,如:
s1.join();
s2.join();
添加回答
舉報
0/150
提交
取消