Javaのスレッドセキュリティ集合クラス
5543 ワード
スレッドセキュリティコレクションクラス
含む:StringBuffer:スレッドセキュリティString:可変クラス、すべてのスレッドセキュリティRandom:スレッドセキュリティVector:Listを実現し、スレッドセキュリティHashtable:Mapを実現し、スレッドセキュリティ
jdk 5.0に追加されたスレッドセキュリティ集合クラスConcurrentHashMap:Mapが実装され、スレッドセキュリティConcurrentSkipListMap:Mapが実装され、スレッドセキュリティCopyOnWriteArrayList:Listが実装され、スレッドセキュリティ
ブロックキューの適用
**キュー:**FIFO、すなわちfirst in first out、先進先出原則
例:
実行結果:
含む:StringBuffer:スレッドセキュリティString:可変クラス、すべてのスレッドセキュリティRandom:スレッドセキュリティVector:Listを実現し、スレッドセキュリティHashtable:Mapを実現し、スレッドセキュリティ
jdk 5.0に追加されたスレッドセキュリティ集合クラスConcurrentHashMap:Mapが実装され、スレッドセキュリティConcurrentSkipListMap:Mapが実装され、スレッドセキュリティCopyOnWriteArrayList:Listが実装され、スレッドセキュリティ
ブロックキューの適用
**キュー:**FIFO、すなわちfirst in first out、先進先出原則
例:
private static BlockingQueue queue = new ArrayBlockingQueue<>(5);
public static void main(String[] args) {
//
new Thread(()->{
for (int i = 0; i < 10; i++) {
Product p = new Product(i);
System.out.println(Thread.currentThread().getName()+" :"+p);
try {
queue.put(p);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
//
for (int j = 0; j < 5; j++) {
new Thread(()->{
for (int i = 0; i < 2; i++) {
try {
Product p = queue.take();
System.out.println(Thread.currentThread().getName()+" :"+p);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
実行結果:
Thread-0 :Product{i=0}
Thread-0 :Product{i=1}
Thread-1 :Product{i=0}
Thread-0 :Product{i=2}
Thread-2 :Product{i=1}
Thread-3 :Product{i=2}
Thread-0 :Product{i=3}
Thread-0 :Product{i=4}
Thread-4 :Product{i=3}
Thread-5 :Product{i=4}
Thread-0 :Product{i=5}
Thread-0 :Product{i=6}
Thread-1 :Product{i=5}
Thread-2 :Product{i=6}
Thread-0 :Product{i=7}
Thread-0 :Product{i=8}
Thread-0 :Product{i=9}
Thread-3 :Product{i=7}
Thread-5 :Product{i=9}
Thread-4 :Product{i=8}