JVM虚拟机-线程安全
java线程安全的分类:
1,不可变(final)
2,相对线程安全
3,
4,线程对立:
Thread的suspend和resume,死锁风险
System.SetIn(),System.setOut(),System.runFinalizersOnExit()
线程安全的实现方式:
1,互斥 同步,他们俩是两个概念
互斥和同步,互斥是因,同步是果,互斥是手段,同步是目标
互斥是实现方式:临界区,互斥量,信号量等
synchronized的字节码角度:会在同步块前后加monitorenter,moniterexit指令,参数是reference类型的锁对象
synchronized未指定锁对象时,synchronized的锁对象,在类方法上是当前类的Class,在实例方法上是当前实例对象

synchronized的锁指令加锁实现原理:对象的锁的计数器+1加锁,释放锁,计数器-1

重入锁与synchronized的区别
2,非阻塞同步:乐观锁,CAS...

需要保证操作和冲突检测两个步骤的原子性(联想到ACID),处理器指令层面来解决,单条指令 ,compareAndSwap()

CAS指令

Unsafe类
CAS的ABA问题

3,无同步方案:
a,可重入代码:递归调用,责任链模式中链的传递

b,线程本地存储:ThreadLocal

浙公网安备 33010602011771号