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

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

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

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

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

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

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

相关文章
|
27天前
Synchronized锁原理和优化
Synchronize是通过对象头的markwordk来表明监视器的,监视器本质是依赖操作系统的互斥锁实现的。操作系统实现线程切换要从用户态切换为核心态,成本很高,此时这种锁叫重量级锁,在JDK1.6以后引入了偏向锁、轻量级锁、重量级锁 偏向锁:当一段代码没有别的线程访问,此时线程去访问会直接获取偏向锁 轻量级锁:当锁是偏向锁时,有另外一个线程来访问,偏向锁会升级为轻量级锁,这个线程会通过自旋方式不断获取锁,不会阻塞,提高性能 重量级锁:轻量级锁自旋一段时间后线程还没有获取到锁,线程就会进入阻塞状态,该锁会升级为重量级锁,重量级锁时,来竞争锁的所有线程都会阻塞,性能降低 注意,锁只能升
25 5
|
3月前
|
存储 安全 Java
Java并发编程之深入理解Synchronized关键字
在Java的并发编程领域,synchronized关键字扮演着守护者的角色。它确保了多个线程访问共享资源时的同步性和安全性。本文将通过浅显易懂的语言和实例,带你一步步了解synchronized的神秘面纱,从基本使用到底层原理,再到它的优化技巧,让你在编写高效安全的多线程代码时更加得心应手。
|
4月前
|
Java 程序员 开发者
Java并发编程之深入理解synchronized关键字
本文旨在探究Java语言中一个核心且经常被误解的并发控制工具——synchronized关键字。通过分析其内部机制、使用场景和性能考量,我们将揭示这个简单关键字背后隐藏的强大功能和潜在陷阱。文章将引导你重新认识synchronized,并学会如何在实际开发中高效利用它来构建健壮的多线程应用程序。
|
7月前
|
Java
Java并发编程:深入理解Synchronized关键字
【5月更文挑战第27天】Java并发编程是Java开发中不可或缺的一部分,而synchronized关键字则是实现并发控制的重要手段之一。本文将深入探讨synchronized关键字的使用方法、原理以及注意事项,帮助读者更好地理解和应用这一关键字,提高Java并发编程的能力。
|
7月前
|
安全 Java 编译器
Java多线程基础-6:线程安全问题及解决措施,synchronized关键字与volatile关键字(一)
线程安全问题是多线程编程中最典型的一类问题之一。如果多线程环境下代码运行的结果是符合我们预期的,即该结果正是在单线程环境中应该出现的结果,则说这个程序是线程安全的。 通俗来说,线程不安全指的就是某一代码在多线程环境下执行会出现bug,而在单线程环境下执行就不会。线程安全问题本质上是由于线程之间的调度顺序的不确定性,正是这样的不确定性,给我们的代码带来了很多“变数”。 本文将对Java多线程编程中,线程安全问题展开详细的讲解。
107 0
|
7月前
|
安全 Java 调度
Java多线程- synchronized关键字总结
Java多线程- synchronized关键字总结
52 0
|
7月前
|
安全 Java 程序员
synchronized关键字与ReentrantLock的区别和应用
synchronized关键字与ReentrantLock的区别和应用
45 0
|
存储 安全 Java
JUC第五讲:关键字synchronized详解
JUC第五讲:关键字synchronized详解
|
安全 Java 编译器
volatile 与 synchronized 关键字的区别?
volatile 与 synchronized 关键字的区别?
56 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 的区别
105 0
synchronized关键字(作用 + 特点 + 锁升级 + 锁优化 + 与 volatile 对比)

热门文章

最新文章