一 点睛
如果使用一些开源库,API 的调用层次比较深,看代码不容易发现死锁风险,比如 JDK 中的 HashMap,该数据结构不是线程安全的类,如果在多线程同时写操作的情况下不对其进行同步化封装,很容易出现死循环引起的死锁,程序运行一段时间后 CPU 等资源居高不下,各种诊断工具很难派生用场,因为死锁引起的进程往往会榨干 CPU 等几乎所有资源,诊断工具因为缺少资源一时很难启动。
二 代码
package concurrent;
import java.util.HashMap;
public class HashMapDeadLock {
private final HashMap<String, String> map = new HashMap<>();
public void add(String key, String value) {
map.put(key, value);
}
public static void main(String[] args) {
final HashMapDeadLock lockMap = new HashMapDeadLock();
for (int i = 0; i < 2; i++) {
new Thread(() -> {
for (int j = 0; j < Integer.MAX_VALUE; j++) {
lockMap.add(String.valueOf(j), String.valueOf(j));
}
}).start();
}
}
}