【JUC】4.Synchronized与ReentrantLock对比
时间:2019-10-11
本文章向大家介绍【JUC】4.Synchronized与ReentrantLock对比,主要包括【JUC】4.Synchronized与ReentrantLock对比使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
与synchronized相同,ReentrantLock也是一种互斥锁;
synchronized与ReentrantLock的对比:
-
可以再次获取自己的内部锁,即:一个线程获取某对象锁,在没有释放此对象锁的同时,可以再次获得此锁;
一个锁每次被线程获取,锁计数器就增加1,知道锁计数器将为0,才能释放锁;
-
Synchronized依赖于JVM,ReenTrantLock依赖于API
Synchronized的很多优化,都是在JVM层面优化的,并不暴露给用户;
ReenTrantLock的各种功能实现,都可以用户自己通过调用API进行实现(lock,unLock);
-
ReenTrantLock增加了高级功能
-
等待可中断
// 调用: lock.lockInterruptibly( );
让等待锁的线程,放弃等待,去执行别的事情。
-
-
可实现公平锁
Synchronized默认非公平;ReenTrantLock默认也是非公平锁;
// 构造公平锁: Lock lock=new ReentrantLock(true)
-
锁可以绑定Condition,实现选择性通知
synchronized关键字与wait()和notify/notifyAll()方法相结合可以实现等待/通知机制;
ReentrantLock借助于与锁绑定的condition对象,来调用await()和signal/signalAll()方法来实现;
-
ReentrantLock可以实现tryLock
对于没有拿到锁的线程,可以令其做一些别的事情,不会阻塞;
-
在JVM各种锁机制的优化下,Synchronized在很多地方都默认使用CAS的乐观锁,进行优化了;
所以并不是ReentrantLock性能更强!!
原文地址:https://www.cnblogs.com/mussessein/p/11653427.html
- Javascript的原型继承,说清楚
- 从上到下打印二叉树——层序遍历二叉树
- 树的子结构
- .Net WebApi 初探
- [我的理解]Javascript的原型与原型链
- 《Spark快速大数据分析》—— 第六章 Spark编程进阶
- 《Spark快速大数据分析》—— 第七章 在集群上运行Spark
- 以后去Vero Moda买衣服,可以问会“看脸”的AI导购了
- Tensorflow新手通过PlayGround可视化初识神经网络
- [大数据之Spark]——快速入门
- [大数据之Spark]——Actions算子操作入门实例
- [大数据之Spark]——Transformations转换入门经典实例
- 字符串的排列
- 斐波那契额数列及青蛙跳台阶问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法