看板 java 關於我們 聯絡資訊
請大家幫我看看我的觀念對嗎? synchronized的用法可分為2類 第一類: synchronized void method(){} void method(){ synchronized(this) } 以上這兩個方法相同,就稱第一類好了 第一類的方法,只能鎖住相同類別,相同的instance 比如說有一個Student類別 Student sd1 = new Student(); Student sd2 = new Student(); new Thread(sd1).start(); new Thread(sd2).start(); sd1與sd2雖然同類別,但為不同的instance, 所以用第一類這種方法是不安全的 第二類: static synchronized void method(){} void method(){ synchronized(Student.class); } 以上這兩個方法相同,就稱第二類好了 第二類的方法,可以鎖住相同類別 且 相同或不同的instance 所以剛剛那個例子,用此方法的話就是安全的。 請問大家,我的觀念對嗎? 感覺第一類的方法似乎比較常看到, 但我拿來用時,就發生不安全的情形, 後來改成第二類的方法才解決。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.65.141
jej:分類正確..但new出來instance是不同的..用第二個也鎖不起來.. 02/02 00:09
sbrhsieh:正確的觀念是只有一種。也沒有孰優孰劣 02/02 00:13
sshjj:謝謝樓上,看來還需要再研究一下 02/02 00:13
sshjj:那個連結我看過,但對於他的第四點一直沒有很懂 02/02 00:15
sbrhsieh:第四點不懂也可以說是四個都不懂 02/02 00:17
sbrhsieh:一直提鎖來鎖去到底鎖甚麼東西?鎖了又有什麼作用? 02/02 00:33
※ 編輯: sshjj 來自: 114.42.65.141 (02/02 00:38)
jej:就像連結說得..使用static someobj用singleton invoke.. 02/02 01:06
jej:可以保證一個區塊間只有一個thread..[這只是作法之一] 02/02 01:08