本章内容 不可变类的使用 不可变类设计 无状态类设计 7.1 日期转换的问题 问题提出 下面的代码在运行时,由于 SimpleDateFormat 不是线程安全的 @Slf4j public class Test1 { public static void main(String[] args) { SimpleDateFormat sim…
本章内容 CAS 与 volatile 原子整数 原子引用 原子累加器 Unsafe 6.1 问题提出 有如下需求,保证 account.withdraw 取款方法的线程安全 package cn.itcast; import java.util.ArrayList; import java.util.List; interface Account…
为什么呢?分析一下: 1. 初始状态, t 线程刚开始从主内存读取了 run 的值到工作内存。 2. 因为 t 线程要频繁从主内存中读取 run 的值,JIT 编译器会将 run 的值缓存至自己工作内存中的高速缓存中, 减少对主存中 run 的访问,提高效率 3. 1 秒之后,main 线程修改了 run 的值,并同步至主存,而 t 是从自己工作内…
大纲 实际测试 使用synchronized关键字解决问题: @Slf4j public class Test16 { static int count = 0; static Object lock = new Object(); public static void main(String[] args) throws Interrup…
预备知识希望你不是一个初学者线程安全问题,需要你接触过 Java Web 开发、Jdbc 开发、Web 服务器、分布式框架时才会遇到基于 JDK 8,最好对函数式编程、lambda 有一定了解采用了 slf4j 打印日志,这是好的实践采用了 lombok 简化 java bean 编写给每个线程好名字,这也是一项好的实践 pom.xml <p…