并发

synchronized

了解偏向锁、轻量级锁、重量级锁的概念以及升级机制、以及和ReentrantLock的区别。       https://www.cnblogs.com/deltadeblog/p/9559035.html

ReentrantLock 翻译:可重入锁

两者的共同点:
1. 都是用来协调多线程对共享对象、变量的访问
2. 都是可重入锁,同一线程可以多次获得同一个锁
3. 都保证了可见性和互斥性
两者的不同点:
1. ReentrantLock 显示的获得、释放锁,synchronized 隐式获得释放锁
2. ReentrantLock 可响应中断、可轮回,synchronized 是不可以响应中断的,为处理锁的
不可用性提供了更高的灵活性
3. ReentrantLock 是 API 级别的,synchronized 是 JVM 级别的
4. ReentrantLock 可以实现公平锁
5. ReentrantLock 通过 Condition 可以绑定多个条件
6. 底层实现不一样, synchronized 是同步阻塞,使用的是悲观并发策略,lock 是同步非阻
塞,采用的是乐观并发策略
7. Lock 是一个接口,而 synchronized 是 Java 中的关键字,synchronized 是内置的语言
实现。
8. synchronized 在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;
而 Lock 在发生异常时,如果没有主动通过 unLock()去释放锁,则很可能造成死锁现象,
因此使用 Lock 时需要在 finally 块中释放锁。
9. Lock 可以让等待锁的线程响应中断,而 synchronized 却不行,使用 synchronized 时,
等待的线程会一直等待下去,不能够响应中断。
10. 通过 Lock 可以知道有没有成功获取锁,而 synchronized 却无法办到。
11. Lock 可以提高多个线程进行读操作的效率,既就是实现读写锁等

ReentrantLock实现原理深入探究

https://www.cnblogs.com/xrq730/p/4979021.html

CAS实现原理深入探究

https://www.cnblogs.com/xrq730/p/4976007.html

死磕Synchronized底层实现--概论

https://cxyroad.blog.csdn.net/article/details/113777629

https://blog.csdn.net/weixin_34235135/article/details/88033837

【Java并发编程】synchronized(五):锁膨胀原理分析(JDK6后

https://blog.csdn.net/weixin_43935927/article/details/114047971

synchronized和 synchronized 了解偏向锁、轻量级锁、重量级锁的概念以及升级机制、以及和ReentrantLock的区别。的更多相关文章

  1. Synchronized锁性能优化偏向锁轻量级锁升级 多线程中篇(五)

    不止一次的提到过,synchronized是Java内置的机制,是JVM层面的,而Lock则是接口,是JDK层面的 尽管最初synchronized的性能效率比较差,但是随着版本的升级,synchro ...

  2. Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)

    Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...

  3. 【转载】Java中的锁机制 synchronized & 偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景 & AtomicReference

    参考文章: http://blog.csdn.net/chen77716/article/details/6618779 目前在Java中存在两种锁机制:synchronized和Lock,Lock接 ...

  4. 并发-Synchronized底层优化(偏向锁、轻量级锁)

    Synchronized底层优化(偏向锁.轻量级锁) 参考: http://www.cnblogs.com/paddix/p/5405678.html 一.重量级锁 上篇文章中向大家介绍了Synchr ...

  5. 【转】Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)

     一.重量级锁 上篇文章中向大家介绍了Synchronized的用法及其实现的原理.现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的.但是监视器锁本 ...

  6. java并发笔记之synchronized 偏向锁 轻量级锁 重量级锁证明

    警告⚠️:本文耗时很长,先做好心理准备 本篇将从hotspot源码(64 bits)入手,通过分析java对象头引申出锁的状态:本文采用大量实例及分析,请耐心看完,谢谢   先来看一下hotspot的 ...

  7. 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

    接触过线程安全的同学想必都使用过synchronized这个关键字,在java同步代码快中,synchronized的使用方式无非有两个: 通过对一个对象进行加锁来实现同步,如下面代码. synchr ...

  8. synchronized实现原理及其优化-(自旋锁,偏向锁,轻量锁,重量锁)

    1.synchronized概述: synchronized修饰的方法或代码块相当于并发中的临界区,即在同一时刻jvm只允许一个线程进入执行.synchronized是通过锁机制实现同一时刻只允许一个 ...

  9. JVM锁简介:偏向锁、轻量级锁和重量级锁

    转自:https://www.aimoon.site/blog/2018/05/21/biased-locking/ 比较复杂,简略见另一篇:https://www.cnblogs.com/twohe ...

随机推荐

  1. JUC并发工具类之Semaphore控制并发线程数

    首先看看关于Semaphore的UML图: 从上图看,信号量的实现原理与锁类似,是基于AQS的:有公平与非公平之分.当初始的资源数为1时就退化为排它锁了,资源总数即state的初始值,在acquire ...

  2. vue的编译作用域

    其实就是在哪个实例中使用vue指令,他所在的作用域就在那个实例中 例如 当组件标签使用vue指令的时候,他所在的作用域就是vue实例对象的作用域,而当组件的 template中 标签使用vue指令的话 ...

  3. python3批量统计用户电脑配置

    最近领导想统计一下用户电脑配置信息.好几百人难道让我一个一个的去弄吗? 想想还是写个程序接收一下吧. 客户端 # -*- coding: utf-8 -*- #author:Guoyabin impo ...

  4. NSSCTF-easyupload3.0

    打开环境,是一个上传的界面,点击下面的会回显出上传成功之后的路径,选择上传文件可以直接上传文件 尝试各种文件的上传(菜狗不知道怎么一下做出来,只好一个一个试),最后试出来的文件是.htaccess文件 ...

  5. 微信小程序实现文本的展开与收起

    致谢 https://www.jianshu.com/p/9458083214cc 效果图   代码 js部分 // pages/volunteer/active/info/activeInfo.js ...

  6. 【windows 操作系统】什么是窗口?|按钮也是窗口

    起因 在看操作系统消息机制的时候,看到一句化:全局消息队列把消息发送到窗口所在的线程消息队列.突然就怀疑起了窗口的意思.于是就有这边基类. 文章来源:https://docs.microsoft.co ...

  7. 【Oracle】PLSQL如何更新、提交数据库中数据

    转至:https://blog.csdn.net/Bee_AI/article/details/89279612 Oracle更新单表数据时,一般使用SELECT--FOR UPDATE语句,这条语句 ...

  8. 2016EC Final F.Mr. Panda and Fantastic Beasts

    题目大意 \(T(1\leq T\leq42)\)组数据,给定\(n(2\leq n\leq 50000)\)个字符串\(S_{i}(n\leq\sum_{i=1}^{n}S_{i}\leq 2500 ...

  9. 微服务从代码到k8s部署应有尽有系列(十、错误处理)

    我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...

  10. php 23种设计模式 - 迭代器模式

    迭代器模式 迭代器模式 (Iterator),又叫做游标(Cursor)模式.提供一种方法访问一个容器(Container)对象中各个元素,而又不需暴露该对象的内部细节. 当你需要访问一个聚合对象,而 ...