出现线程安全性问题的条件 :

 在多线程的环境下

 必须有共享资源

 对共享资源进行非原子性操作

解决线程安全性问题的途径

synchronized (偏向锁,轻量级锁,重量级锁) 

    单例模式中的双重检测  

volatile   不能保证非原子操作

JDK提供的原子类 使用Lock(共享锁,排它锁)

认识“*锁”

偏向锁

轻量级锁

重量级锁

重入锁

自旋锁

共享锁

独占锁

排他锁

读写锁

公平锁

非公平锁

死锁

活锁