作者sshjj (我要錢$$)
站內java
標題[問題] synchronized的方法
時間Tue Feb 2 00:00:56 2010
請大家幫我看看我的觀念對嗎?
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