Synchronized和SyncRoot與 集合類 的同步

來源:互聯網
上載者:User

在許多的集合類中,都能看到Syncronized靜態方法和SyncRoot執行個體屬性,這兩個單詞的sync就顯而易見的說明了是用來實現同步的。集合類通常不是安全執行緒的,多個讀取器可以安全的讀取集合.但是對集合的任何修改都將為訪問集合的所有線程產生不明確的結果,對於集合類來講,我們可以使用下面兩種方式來避免:

(1) Synchronized 方法,並通過該封裝以獨佔方式訪問集合,編譯器會自動產生適當的 Monitor.Enter 和 Monitor.Exit 調用

(2) 在訪問該集合時對SyncRoot屬性使用鎖定機制

這兩種方式到底有哪些區別的,實際應用時應該使用哪種方法呢?

首先需要明確的是Synchronized 並不能保證枚舉的同步,如果沒有任何線程在讀取 Hashtable,則 Synchronized 支援使用多個寫入線程。如果使用一個(或多個)讀取器以及一個(或多個)編寫器,則同步封裝不提供安全執行緒的訪問,也就是說使用這個方法並不能保證枚舉的同步,例如,一個線程正在刪除或添加集合項目,而另一個線程同時進行枚舉,這時枚舉將會拋出異常。所以,在枚舉的時候,你必須明確鎖定這個集合。這時就要用到SyncRoot。

什麼是SyncRoot呢,可以這樣認為,一些集合類自己維護著一個內部的資料結構,而SyncRoot就是這個一個內部對象,如果給了對這個內部資料結構的訪問權,那麼僅僅鎖定集合對象是無用的。此時就要用到SyncLock(ht.SyncRoot)來保證集合的變化。

連結地址:http://www.cnblogs.com/deodara/archive/2008/04/11/1148046.html 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.