java.util.ConcurrentModificationException
摘要: Iterator 是工作在一個(gè)獨(dú)立的線程中,并且擁有一個(gè) mutex 鎖。 Iterator 被創(chuàng)建之后會(huì)建立一個(gè)指向原來(lái)對(duì)象的單鏈索引表,當(dāng)原來(lái)的對(duì)象數(shù)量發(fā)生變化時(shí),這個(gè)索引表的內(nèi)容不會(huì)同步改變,所以當(dāng)索引指針往后移動(dòng)的時(shí)候就找不到要迭代的對(duì)象,所以按照 fail-fast 原則 Iterator 會(huì)馬上拋出 java.util.ConcurrentModificationException 異常。
所以 Iterator 在工作的時(shí)候是不允許被迭代的對(duì)象被改變的。但你可以使用 Iterator 本身的方法 remove() 來(lái)刪除對(duì)象, Iterator.remove() 方法會(huì)在刪除當(dāng)前迭代對(duì)象的同時(shí)維護(hù)索引的一致性
閱讀全文
posted @
2012-01-06 17:14 RoyPayne 閱讀(216) |
評(píng)論 (0) 編輯
如何在java中正確使用volatile
摘要: Java? 語(yǔ)言包含兩種內(nèi)在的同步機(jī)制:同步塊(或方法)和 volatile 變量。這兩種機(jī)制的提出都是為了實(shí)現(xiàn)代碼線程的安全性。其中 Volatile 變量的同步性較差(但有時(shí)它更簡(jiǎn)單并且開(kāi)銷(xiāo)更低),而且其使用也更容易出錯(cuò)。在這期的 Java 理論與實(shí)踐中,Brian Goetz 將介紹幾種正確使用 volatile 變量的模式,并針對(duì)其適用性限制提出一些建議。
閱讀全文
posted @
2012-01-06 10:44 RoyPayne 閱讀(310) |
評(píng)論 (1) 編輯