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

 

  

posted on 2017-10-10 09:54  Vindia  阅读(155)  评论(0)    收藏  举报

导航