2011年12月1日 星期四

Synchronized

使用時機
Synchronized的使用時機很難定義,比較常見的情況是,當程式中會取出某一個共用的物件且會判斷物件內容值,再更新物件內容,此情況大部分都需要synchronized保護。

1. Synchronized Method :鎖定Method所屬物件,如Method被 new 超過1個以上,會保護不到Method內的程式。
2. Synchronized Static Method :此種synchronized用法鎖定的物件為Method所屬的物件的Class,不管被new幾次,都能夠保證同一個時間只會有一個Thread在執行此Method。

3. Synchronized(this) :應用同2,也是在鎖定Method

4. Synchronized(SomeObject) :此種synchronized用法鎖定的是SomeObject,如果SomeObject是同一個Class的兩個不同Instance,那 synchronized區塊內就有可能被同時執行。如果每一個Synchronized的SomeObject都是同一個Instance(或者 SomeObject本身就是Static),就可以保證區塊內同時間只會有一個Thread執行。
當使用Synchornized(SomeObject)時,SomeObject本身處於被Lock狀態,但此時其他的Thread是可以去更改SomeObject裡面的值,Lock只是同步化的狀態,不表示不能更改資料。


沒有留言:

張貼留言