熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java容器類的線程安全

2013-11-23 19:35:37  來源: Java核心技術 

  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();

  }

  }

  }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/27139.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.