synchronized底层

简介: synchronized底层

synchronized 是 Java 中用于实现线程同步的关键字。它可以被应用于代码块或方法上,用于对某个对象或类进行加锁。

在底层实现上,synchronized 的主要原理是基于对象的监视器(monitor)和内置锁(intrinsic lock)。每个对象都有一个与之关联的监视器,也称为锁。当一个线程进入 synchronized 修饰的代码块或方法时,它首先要尝试获取该对象的锁,如果该锁没有被其他线程占用,则当前线程会获得锁并顺利执行,锁会被标记为被当前线程占用;否则,当前线程就会阻塞等待,直到获取到锁才能执行。当线程执行完 synchronized 代码块或方法后,会释放锁,让其他线程有机会获取该锁。

在 Java 虚拟机的内存模型中,synchronized 关键字还具有隐式的内存语义,确保线程在获取锁之前读取到最新的共享变量值,并在释放锁时将修改后的共享变量值刷新回主内存,以保证多线程间共享变量的可见性和一致性。

总结来说,synchronized 关键字的底层实现使用了对象的监视器和内置锁,通过获取和释放锁来实现线程的同步。它提供了简单而有效的线程安全机制,但在一些复杂的场景下可能会存在性能问题。为了更好地满足并发需求,Java 5 引入了更灵活的锁机制,如 Lock 接口及其实现类 ReentrantLock,可以更精确地控制锁的获取和释放。

目录
相关文章
|
1天前
|
Java
【多线程系列】你先说说synchronized的实现原理
面试官:听说你精通多线程,那我就考考你吧面试官:不用慌尽管说,错了也没关系😊。。。❤️。
28 1
【多线程系列】你先说说synchronized的实现原理
|
1天前
|
Java 编译器
synchronized原理
synchronized原理
|
2天前
|
存储 监控 安全
Synchronized 实现原理
Synchronized 实现原理
43 0
|
5月前
|
Java
【多线程】synchronized的特性
【多线程】synchronized的特性
|
8月前
|
Java 编译器 C++
Java同步锁Synchronized底层源码和原理剖析
Java同步锁Synchronized底层源码和原理剖析
77 0
|
9月前
|
存储 安全 编译器
Synchronized底层原理
Synchronized底层原理
70 0
|
11月前
|
Java API 调度
synchronized 和 ReentrantLock 的实现原理是什么?它们有什么区别
synchronized 和 ReentrantLock 的实现原理是什么?它们有什么区别
61 0
|
11月前
|
存储 安全 Java
synchronized 的底层原理
synchronized 的底层是通过 Java 中的监视器锁(monitor)来实现的。每个 Java 对象都有一个与之对应的监视器锁,当一个线程获取了该对象的监视器锁,就可以执行 synchronized 代码块或方法。其他线程只能等待该线程释放锁,才能获取该对象的监视器锁并执行 synchronized 代码块或方法。
82 0
synchronized 的底层原理
|
Java
synchronized原理剖析
synchronized原理剖析
84 0
|
存储 监控 Java
Synchronized原理
我们最初学习Java的时候,遇到多线程我们会知道synchronized,对于当时的我们来说synchronized是保证了多线程之间的同步,也成为了我们解决多线程情况的常用手段。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。