原創|其它|編輯:郝浩|2009-11-25 10:36:19.000|閱讀 656 次
概述:本文介紹了Java容器類的線程安全問題。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
1、Java容器類的關系圖
Collection
├List 接口
│├LinkedList 鏈表
│├ArrayList 順序結構動態數組類
│└Vector 向量
│ └Stack 棧
└Set
Map
├HashTable
├HashMap
└WeakHashMap List接口
2、線程安全的和線程不安全的
Vector和HashMap是線程安全的
LinkedList、ArrayList和HashMap是線程不安全的
由于同步需要花費時間,因此線程安全的執行效率要低于線程不安全的
3、在多線程操作
案例:多線程操作導致List報NoSuchElementException
java.util.NoSuchElementException
at java.util.LinkedList.remove(LinkedList.java:788)
at java.util.LinkedList.removeFirst(LinkedList.java:134)
at freemarker.core.RegexBuiltins.getPattern(RegexBuiltins.java:138)
解決方法:
調用Collections的同步List
List items = Collections.synchronizedList(new LinkedList());
public void remove() {
if (!items.isEmpty()) {
return items.remove(0);
}
}
設置標志,同步
LinkedList items = new LinkedList();
String flag="abcdef";
public void remove() {
synchronized(flag){
if (!items.isEmpty()) {
return items.removeFirst();
}
}
}
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載