Java容器类的关系图
Collection
├List 接口
│├LinkedList 链表
│├ArrayList 顺序结构动态数组类
│└Vector 向量
│└Stack 栈
└Set
Map
├HashTable
├HashMap
└WeakHashMap List接口
线程安全的和线程不安全的
Vector和HashMap是线程安全的
LinkedListArrayList和HashMap是线程不安全的
由于同步需要花费时间因此线程安全的执行效率要低于线程不安全的
在多线程操作
案例多线程操作导致List报NoSuchElementException
javautilNoSuchElementException
at javautilLinkedListremove(LinkedListjava:)
at javautilLinkedListremoveFirst(LinkedListjava:)
at reRegexBuiltinsgetPattern(RegexBuiltinsjava:)
解决方法
调用Collections的同步List
List<String> items = CollectionssynchronizedList(new LinkedList<String>());
public void remove() {
if (!itemsisEmpty()) {
return itemsremove();
}
}
设置标志同步
LinkedList<String> items = new LinkedList<String>();
String flag=abcdef;
public void remove() {
synchronized(flag){
if (!itemsisEmpty()) {
return itemsremoveFirst();
}
}
}