重量级锁,Javs SE 1.6对synchronized进行的各种优化后,synchronized并不会显得那么重了。
作用:原子性:确认线程互斥的访问同步代码。
可见性:
有序性:
在Hotspot JVM中,锁叫做对象监视器:ObjectMonitor;
三种用法:
作用在实例方法中,监视器锁是对象实例。
静态方法中,监视器锁是对象的Class实例,因为Class数据存储在永久代,因此静态方法锁相当于该类的全局锁。
某一个对象的实例:监视器锁是括号括起来的对象实例。
synchronized 内置锁 是一种 对象锁(锁的是对象而非引用变量)。作用粒度是对象,可以用来实现对临界资源的同步互斥访问,是可重入的。可重入最大的作用可以避免死锁。
子类同步方法调用父类同步方法,如果没有可重入性特性,则会发生死锁。
Synchronized是JVM层:
操作系统线程对应关系:1:1的关系。jvm创建一个线程,内核空间也创建一个线程
JVM:new Thread().start()。
Synchronzied(互斥锁)加锁后,同一时间只有一个线程能得到这个锁。
优化过程:
重量级锁:jvm管理的线程和(加锁的时候)交给操作系统来管理,有结果后返回给JVM。
JAVA提供的原子类:AtomicInteger //轻量级锁,无锁,自旋锁(这三个一回事儿)
CAS实现自旋锁。while()实现,直到原来值和内存值相同才成功。