日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java同步读写,关于java:Collections中的synchronizedMap方法是否同步读写操作

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java同步读写,关于java:Collections中的synchronizedMap方法是否同步读写操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本問題已經有最佳答案,請猛點這里訪問。

當我做一個收藏.同步DMAP(Somehashmap)時,所有的都可以進入同步地圖嗎?還是只寫同步操作?如果從地圖上讀到兩條線怎么辦?威爾是同步的嗎?似乎有必要如果一個螺紋被放置()而另一個螺紋被放置(),該怎么辦?

因為Collections.synchronizedMap非?;?#xff0c;幾乎不能使用。還有用于更嚴重的并發使用的ConcurrentHashMap。

看一下包裝您的Map的SynchronizedMap的源代碼。

...

public V get(Object key) {

synchronized (mutex) {return m.get(key);}

}

public V put(K key, V value) {

synchronized (mutex) {return m.put(key, value);}

}

public V remove(Object key) {

synchronized (mutex) {return m.remove(key);}

}

... // more methods synchronized in the same way

public static Map synchronizedMap(Map m) {

return new SynchronizedMap<>(m);

}

所以,是的,所有訪問都是同步的。

但不幸的是,讀寫在內部互斥體上是同步的,這使得外部代碼在持有鎖的同時無法在實體上迭代。編輯:Sotirios和Affe是正確的,我的評論應該被忽略。

JavaDoc就是這么說的:It is imperative that the user manually synchronize on the returned map when iterating over any of its collection views:...

互斥體實際上就是"this",它的編寫方式很簡單。同步映射以使其正常迭代。

代碼在mutex而不是直接在this上同步的原因是代碼與SynchronizedSortedMap共享,需要支持返回在父映射上同步的子映射。見Collections.SynchronizedSortedMap.subMap。

@我知道,我只是說明了為什么這些方法不是以public synchronized someMethod...的形式編寫的。它不僅僅是慣用的,它是為了支持返回通過synchronizedMap的第二個構造函數在父映射上同步的synchronizedMap。

@增量1誤解了您的評論。意味著方法是同步的。

@Sotiriosdelimanolis不用擔心,我實際上是在回應affe的評論(關于mutex的使用是慣用的),我應該恰當地回答我的評論。

是的,它同步所有操作。它不使用多個讀卡器、單寫程序的方法——它就像通過一個監視器同步所有訪問一樣簡單。

集合上的所有方法調用都已同步。一次只允許一個線程讀取/修改集合。

集合中的synchronized*方法不是設計為最佳的線程安全版本/實現。他們只是為了方便。

同步是一個困難的問題,通常需要根據您的特定場景使用不同的同步方法。如果您需要其他類型的線程安全性,那么還有許多其他的線程安全集合可用。您也可以自己編寫同步邏輯。

讀和寫都是同步的,這是確??梢娦运匦璧?。

總結

以上是生活随笔為你收集整理的java同步读写,关于java:Collections中的synchronizedMap方法是否同步读写操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。