java同時データ構造
1786 ワード
よく使うスレッドの安全なデータ構造:
public boolean add(E e) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
Object[] elements = getArray();
int len = elements.length;
//
Object[] newElements = Arrays.copyOf(elements, len + 1);
//
newElements[len] = e;
//
setArray(newElements);
return true;
} finally {
//
lock.unlock();
}
}
である.結論:読みすぎて書き込みが少ない高合併環境で、CopyOnWriteArayListを使用する. システムの性能を高めることができます.ただし、読みすぎが少ない場合はCopyOWriteArayList の性能はまだVectorに及ばないです.(1): ConcerentlinkedQueに代表される高性能チームです.
シーン:高合併シーンに適したキューは、ロックなしで高機能かつダウンを実現し、ブロッキングQueよりも性能が優れています.
(2): BlockingQueインターフェースは渋滞行列の代表です.
シーン:BlockingQueは、高合併時のキュー性能を向上させるのではなく、マルチスレッド間のデータ共有を簡略化することにあります.主に生産者-消費者モードに使われます.読み書きが渋滞する.主にArayBlocking QueとLinked Blocking Queがあります.
5. 同時Deque(双端列):具体的にはJDKソースを参照してください.Linked List、ArayDeque、Linded Blocking DequeはいずれもDequeインターフェースを実現しました.