一.原子问题
在并发编程Bug源头中介绍过,原子问题的源头是线程切换,解决方案禁用线程切换。
CPU控制线程切换,无论单核CPU还是多核CPU,保证同一时刻只有一个线程执行,称为互斥,就能够保证对共享变量的修改时互斥,就能保证原子性。
二.锁模型
互斥的解决方案是锁,把一段需要互斥执行的代码称为临界区。
这个锁模型展示的是锁和锁要保护的资源是有关系,很多并发Bug是因为关联关系,产生奇怪的问题。
三.解决方案
2.1 synchronized
锁是一种通用的技术方案,Java语言提供的synchronized 关键字,就是锁的一种实现。
//Java 编译器会在 synch