基础概念
synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时可以保证共享变量对内存可见性。
Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:
-
- 普通同步方法,锁是当前实例对象
- 静态同步方法,锁是当前类的class对象
- 同步方法块,锁是括号里面的对象
当一个线程访问同步代码块时,它首先是需要得到锁才能执行同步代码,当退出或者抛出异常时必须要释放锁。
底层实现原理
如何来实现这个机制呢?我们先看如下一段简单代码:
public class SynchronizedTest{ public synchronized void test1(){ } public void test2(){ synchronized(this){ } } public static void main(String []args){ } }
利用javap工具查看生成的class 文件信息来分析synchronize的实现
从上图可以看出,同步
原文地址:https://www.cnblogs.com/ktao/p/8454274.html
时间: 2024-11-14 13:15:30