synchronized特性
1)有序性
类型 | 写 | 读 |
---|---|---|
写 | 互斥 | 互斥 |
读 | 互斥 | 互斥 |
2)可见性
可见性是指多个线程访问同一个资源时,该资源的状态、值信息等对于其他线程是可见的。
synchronized
和volatile
都具有可见性。
synchronized
对一个类或者对象加锁时,一个线程如果想要访问共享资源,必须先获得锁,这个锁的状态对于其他线程都是可见的,并且在释放锁之前会将对应的变量修改刷新到共享内存中,保证资源变量的可见性。
3)原子性
本质上是线程互斥保证了原子性。
4)可重入性
示例代码:
public class SyncReIn implements Runnable { |
输出结果:
i = 2000000 |
上述结果表明t1、t2线程都进入了同步代码块,证明了可重入。
synchronized锁升级 —— MarkWord
32位虚拟机
资料:https://www.bilibili.com/video/BV1He411f7jX/ 强推 河北王校长