[問題] 請問我對synchronized的觀念正確嗎?

看板java作者 (我要錢$$)時間16年前 (2010/02/02 00:00), 編輯推噓0(009)
留言9則, 3人參與, 最新討論串1/1
請大家幫我看看我的觀念對嗎? 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

02/02 00:09, , 1F
分類正確..但new出來instance是不同的..用第二個也鎖不起來..
02/02 00:09, 1F

02/02 00:13, , 3F
正確的觀念是只有一種。也沒有孰優孰劣
02/02 00:13, 3F

02/02 00:13, , 4F
謝謝樓上,看來還需要再研究一下
02/02 00:13, 4F

02/02 00:15, , 5F
那個連結我看過,但對於他的第四點一直沒有很懂
02/02 00:15, 5F

02/02 00:17, , 6F
第四點不懂也可以說是四個都不懂
02/02 00:17, 6F

02/02 00:33, , 7F
一直提鎖來鎖去到底鎖甚麼東西?鎖了又有什麼作用?
02/02 00:33, 7F
※ 編輯: sshjj 來自: 114.42.65.141 (02/02 00:38)

02/02 01:06, , 8F
就像連結說得..使用static someobj用singleton invoke..
02/02 01:06, 8F

02/02 01:08, , 9F
可以保證一個區塊間只有一個thread..[這只是作法之一]
02/02 01:08, 9F
文章代碼(AID): #1BPlgxnC (java)