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(); ? ?}}為什么同步代碼塊后的對象的應(yīng)用得是靜態(tài)的? 就是我注釋的那里? 去掉static關(guān)鍵字 輸出內(nèi)容就亂了 交替輸出a b
1 回答

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