2013-07-10 58 views
1

不是ArrayBlockingQueue單個操作是併發與任何其其它操作;他們總是採取相同的鎖定。即使對於size()方法,也需要鎖定。ArrayBlockingQueue - 它真的是並行嗎?

public int size() { 
     final ReentrantLock lock = this.lock; 
     lock.lock(); 
     try { 
      return count; 
     } finally { 
      lock.unlock(); 
     } 
    } 

在執行LinkedBlockingQueue時,您有兩個鎖:put和take。 而對於size()它採用AtomicInteger所以不需要鎖。

所以我的問題是:爲什麼是在concurrent包這個實現 - 是真的ArrayBlockingQueue併發?

+4

它可以在並行環境中使用---這就是問題所在。 –

回答

7

ArrayBlockingQueue是在java.util.concurrent包,因爲多個線程可以同時使用的對象,而線程安全問題。

同時使用多種方法的能力是而不是該對象的用途。

+3

我會補充一點,「併發」包是用於構建併發應用程序的utils集合。這些工具都是「線程安全的」。有些比其他更內在地「同時」。 – jtahlborn