第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果它不能保證對迭代器的同步訪問,我們?yōu)槭裁匆褂猛郊希?/h1>

例如,在下面的代碼中,我們必須在進行迭代時將列表包裝在同步塊中。Collections.synchronizedList 是否使列表同步?如果它不提供任何便利,我們?yōu)槭裁匆@樣做?謝謝!List<Integer> list = Collections.synchronizedList( new ArrayList<>(Arrays.asList(4,3,52)));synchronized(list) {       for(int data: list)         System.out.print(data+" "); }
查看完整描述

3 回答

?
莫回?zé)o

TA貢獻1865條經(jīng)驗 獲得超7個贊

請參閱https://docs.oracle.com/javase/tutorial/collections/implementations/wrapper.html

原因是迭代是通過對集合的多次調(diào)用來完成的,集合必須組合成一個原子操作。

另請參閱https://www.baeldung.com/java-synchronized-collections


查看完整回答
反對 回復(fù) 2022-05-25
?
慕田峪9158850

TA貢獻1794條經(jīng)驗 獲得超8個贊

如果它不提供任何便利,我們?yōu)槭裁匆@樣做

迭代時它對您沒有幫助與不提供便利不同。

所有方法 - get、sizesetisEmpty- 都是同步的。這意味著他們可以看到在任何線程中進行的所有寫入。

如果沒有同步,則無法保證在一個線程中進行的更新對任何其他線程都是可見的,因此例如,一個線程可能看到大小為 5,而另一個線程看到大小為 6。

使列表同步的機制是使其所有方法synchronized:這實際上意味著方法的主體被包裝在一個synchronized (this) { ... }塊中。

該方法仍然如此iterator():那也是synchronized。但是該synchronized塊在iterator()返回時完成,而不是在您完成迭代時完成。這是語言設(shè)計方式的基本限制。

所以你必須通過自己添加同步塊來幫助語言。


查看完整回答
反對 回復(fù) 2022-05-25
?
慕森王

TA貢獻1777條經(jīng)驗 獲得超3個贊

Wrapper 用于從被包裝的集合中同步添加和刪除元素。

JavaDoc 提到迭代不同步,您需要自己同步。

 * It is imperative that the user manually synchronize on the returned
 * list when iterating over it

但是其他訪問操作是線程安全的,并且建立發(fā)生在關(guān)系之前(因為它們使用synchronized)。


查看完整回答
反對 回復(fù) 2022-05-25
  • 3 回答
  • 0 關(guān)注
  • 113 瀏覽
慕課專欄
更多

添加回答

了解更多

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號