1 同步容器类
同步容器类主要是指
java.util.concurrent
下的集合类,这些类的设计主要是用于提高多线程下的并发性能和解决并发读写问题。
主要有以下这些类
ConcurrentHashMap
ConcurrentSkipListMap
ConcurrentSkipListSet
CopyOnWriteArrayList
CopyOnWriteArraySet
以下是并发包下ConcurrentHashMap的应用示例
package com.mafgwo.juc.testvolatile;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* HashMap或HashTable并发读写引发读异常
*/
public class TestConcurrentHashMap {
public static void main(String[] args) {
// // 非线程安全读写会引发异常 java.util.ConcurrentModificationException
// Map<String, String> map = new HashMap<>();
// // 同步锁机制并发读写也会引发异常 java.util.ConcurrentModificationException
// Map<String, String> map = new Hashtable<>();
// 使用并发包下的ConcurrentHashMap不会引发并发读写异常
Map<String, String> map = new ConcurrentHashMap<>();
// 10个线程去put
for (int i = 0; i < 10; i++) {
new Thread(() -> {
for (int i1 = 0; i1 < 10; i1++) {
map.put(i1 + Thread.currentThread().getName(), i1 + "");
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
// 主线程去遍历map
for (Map.Entry<String, String> entry : map.entrySet()) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());
}
}
}