内存模型

Java 内存模型

线程安全

当多个线程访问某个类时,不管运行时环境采用何种方式调度或者这些线程将如何交替执行,并且在主调用代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。——《Java 并发编程实战》

无状态的对象一定是线程安全的。——《Java 并发编程实战》

不可变对象一定是线程安全的。——《Java 并发编程实战》

Thread

为什么尽量不要直接调用 Thread#stop 线程?

stop 会使线程直接停止运行并抛出 ThreadDead 异常,异常会导致线程释放持有的一切锁。假设线程正在某个 critical path,那么。。。很可能只处理了一半,锁就释放了,其他线程便会看到不一致的状态,并对不一致的状态进行操作,进而可能导致严重业务问题。

如果能确保线程任务无锁,stop 应该是 ok 的。

Sync Tool

Atomic 类

CompletableFuture 类

并发容器

ConcurrentHashMap ↔HashMap