Java 同步容器

同步容器有兩類:java

  • Vector、Stack、HashTable
  • Collections類中提供的靜態工廠方法建立的類

Vector 實現了List接口,和ArrayList相似,但方法都是synchronized方法,即進行了同步措施。數組

Stack 相似Vector使用synchronized方法同步,是繼承Vector的。多線程

HashTable實現了Map接口,相似HashMap,可是HashTable進行了同步處理,而HashMap沒有。異步

Collections類是一個工具提供類,提供了大量的方法,如對集合或者容器進行排序查找等操做,還提供了靜態工廠方法來建立同步容器類。函數


HashMap和HashTable區別?Hashmap key能夠是任何類型嗎?工具

  • 1.HashTable的方法是同步的,方法前面都有synchronized,HashMap未同步,在多線程場景要手動同步。能夠經過Map m = Collections.synchronizedMap(new HashMap())對HashMap進行同步操做。
  • 2.HashTable不容許有null值,key和value都不行,HashMap均可以有null。
  • 3.HashTable使用Enumeration遍歷,HashMap使用iteration遍歷。
  • 4.HashTable中hash數組大小默認是11,增長方式是old*2+1。HashMap中hash數組大小默認是16,必定是2的倍數。
  • 5.hash值使用不一樣,HashTable直接使用對象的hashCode,HashMap從新計算hash值。

LinkedList ArrayList區別線程

ArrayList基於數組,LinkedList基於鏈表Arraylist,查找快;LinkedList插入刪除快;隨機查找頻繁用ArrayList,插入刪除頻繁用LinkedList。對象


ArrayList,Vector,HashMap,HashTable擴容機制排序

數組 初始容量 擴容
ArrayList 10 old*3/2+1
Vector 10 old*2
HashMap 16 達到閾值擴容,爲原來兩倍
HashTable 11 達到閾值擴容,old*2+1

Concurrent包繼承

  • semaphore信號量用來表示可用資源的數目,若是請求資源超過這個數,就阻塞這一線程。
  • callable接口,實現call函數,有返回值能夠獲得call函數的返回值判斷call函數是否執行完畢。
  • Callable接口使用泛型去定義它的返回類型。Executors類提供了一些有用的方法去線程池中執行Callable內的任務。因爲Callable任務是並行的,咱們必須等待它返回的結果。java.util.concurrent.Future對象爲咱們解決了這個問題。在線程池提交Callable任務後返回了一個Future對象,使用它咱們能夠知道Callble任務的狀態和獲得Callblede的返回結果。Future提供了get()方法讓咱們能夠等待Callable結束並獲取他的執行結果。
  • Future Task是Future的一個基礎實現,咱們能夠將他同Exexcutors使用處理異步任務。

Java Concurrency API中的Lock接口

  • Lock接口比同步方法和同步塊提供了更具擴展性的鎖操做。他們容許更靈活的結構,能夠具備徹底不一樣的性質,而且能夠支持多個相關類的條件對象。
  • 可使鎖更公平。
  • 可使線程在等待鎖的時候響應中斷,可讓線程嘗試獲取鎖,並在沒法獲取鎖的時候當即返回或者等待一段時間。
  • 能夠在不一樣的範圍,以不一樣的順序獲取和釋放鎖。
相關文章
相關標籤/搜索