线程安全集合类
包括:
StringBuffer: 线程安全
String: 不可变的类 , 都线程安全
Random: 线程安全
Vector: 实现了List,并且线程安全
Hashtable: 实现了Map,并且线程安全
jdk5.0新增的线程安全集合类
ConcurrentHashMap: 实现了Map,并且线程安全
ConcurrentSkipListMap: 实现了Map(可排序),并且线程安全
CopyOnWriteArrayList: 实现了List,并且线程安全
阻塞队列(BlockingQueue)的应用
**队列:**FIFO,即first in first out,先进先出原则
例:
private static BlockingQueue<Product> 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}