synchronized 关键字对于锁的一些优化

简介: synchronized 关键字对于锁的一些优化

synchronized 关键字默认采用的是偏向锁。

1. 在程序运行中,如果始终只有一个线程去获取 synchronized 这个锁的话,在 Java 对象中会记录一个线程的 ID,所以在下次获取 synchronized 锁的时候,只需要比较这个线程 ID 就行了。

2. 在程序运行过程中,如果有第二个线程去请求 synchronized 锁的时候,这里就要分成两种情况。

(1)第一种是在没有发生并发竞争锁的情况下,synchronized 会自动升级为轻量级锁,这个时候第二个线程就会尝试自旋锁的方式来获取锁,因为很快就能拿到锁,所以第二个线程也不会被阻塞。

(2)第二种情况是如果这两个线程出现竞争锁的话,synchronized 会升级为重量级锁,这个时候就只有一个线程可以获得锁,另一个线程就会被阻塞到,只有第一个线程释放锁之后,第二个线程才能拿到锁。

相关文章
|
7月前
|
安全 Java
【Synchronized关键字】
【Synchronized关键字】
|
23天前
|
安全 Java 开发者
Java并发编程:深入理解Synchronized关键字
【4月更文挑战第19天】 在Java多线程编程中,为了确保数据的一致性和线程安全,我们经常需要使用到同步机制。其中,`synchronized`关键字是最为常见的一种方式,它能够保证在同一时刻只有一个线程可以访问某个对象的特定代码段。本文将深入探讨`synchronized`关键字的原理、用法以及性能影响,并通过具体示例来展示如何在Java程序中有效地应用这一技术。
|
4月前
|
安全 Java 程序员
synchronized关键字与ReentrantLock的区别和应用
synchronized关键字与ReentrantLock的区别和应用
21 0
|
10月前
|
安全 Java 编译器
volatile 与 synchronized 关键字的区别?
volatile 与 synchronized 关键字的区别?
42 0
|
Java 编译器
synchronized关键字(作用 + 特点 + 锁升级 + 锁优化 + 与 volatile 对比)
1. synchronized 的作用 1)保证原子性 2)保证内存可见性 3)保证有序性 2. synchronized 特点 3. 锁升级的过程 1)偏向锁 2)轻量级锁 3)重量级锁 4. 锁的优化操作 1)锁消除 2)锁粗化 5. synchronized 使用示例 1)修饰普通方法:锁当前实例对象 2)修饰静态方法:锁当前类对象 3)修饰代码块:指定锁哪个对象 6. volatile 的作用 1)保证内存可见性 2)保证有序性 7. synchronized 和 volatile 的区别
77 0
synchronized关键字(作用 + 特点 + 锁升级 + 锁优化 + 与 volatile 对比)
|
缓存 Java 编译器
深入理解synchronized关键字
synchronized关键字详解
64 0
|
存储 安全 Java
synchronized关键字讲解
synchronized关键字讲解
synchronized关键字讲解
java多线程关键字volatile、lock、synchronized
volatile写和volatile读的内存语义: 1. 线程A写一个volatile变量,实质上是线程A向接下来将要读这个volatile变量的某个线程发出了(其对共享变量所在修改的)消息。 2. 线程B读一个volatile变量,实质上是线程B接收了之前某个线程发出的(在写这个volatile变量之前对共享变量所做修改的)消息。 3. 线程A写一个volatile变量,随后线程B读这个volatile变量,这个过程实质上是线程A通过主内存向线程B发送消息。
261 0
|
安全 Java 对象存储
浅谈synchronized锁原理
保证线程安全的一个重要手段就是通过加锁的形式实现,今天盘点一下Java中锁的八股文
130 0
|
存储 缓存 安全
深入理解synchronized关键字(一)
深入理解synchronized关键字(一)
163 0
深入理解synchronized关键字(一)