Lock锁与synchronized锁的区别
Lock锁与synchronized锁的区别
1、synchronized锁是可以帮助我们自动开锁和关闭锁
2、Lock锁,我们最常用的是ReentrantLock重入锁,需要我们手动的开锁和手动关锁
3、synchronized只能与wait()、notify()方法一起使用
4、ReentrantLock只能与Condition类中的await()、single()方法一起使用
用ReentranLock修改我们上篇文章的生产者和消费者模型
一、产品
二、生产者
/*** 生产者*/
class Product extends Thread {private int count = 1;private User user;public Product(User user) {this.user = user;}@Overridepublic void run() {while (true) {try {//开锁user.getLock().lock();if (user.flag) {try {user.getCondition().await();} catch (InterruptedException e) {e.printStackTrace();}}if (count == 1) {user.setId(1);user.setName("紫炎易霄");user.setAge(21);} else {user.setId(6);user.setName("黑袍萧寻");user.setAge(66);}count = (count + 1) % 2;user.flag = true;//唤醒另一个线程user.getCondition().signal();} catch (Exception e) {e.getStackTrace();} finally {//释放锁user.getLock().unlock();}}}
}
三、消费者
/*** 消费者*/
class Consumer extends Thread {private User user;public Consumer(User user) {this.user = user;}@Overridepublic void run() {while (true) {try {user.getLock().lock();//上锁if (!user.flag) {try {user.getCondition().await();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(user);user.flag = false;//唤醒生产者线程user.getCondition().signal();} catch (Exception e) {e.getStackTrace();} finally {//释放锁user.getLock().unlock();}}}
}
四、运行结果
Lock锁与synchronized锁的区别相关推荐
- 精确通知,顺序访问——Lock锁比synchronized锁的优势之处
题目如下: 多线程之间按顺序调用,实现A->B->C 三个线程启动,要求如下: AA 打印5次,BB 打印10次,CC 打印15次 接着 AA 打印5次,BB 打印10次,CC 打印1 ...
- synchronized锁(方法锁, 代码块锁)
synchronized锁可以解决线程安全问题,但是相应的,只要是锁,就会带来性能开销,所以尽可能减小锁的范围尤为重要. synchronized锁无非修饰普通方法,修饰静态方法,修饰代码块,我认为无 ...
- synchronized锁的级别和ReentrantLock锁(AQS)
目录 synchronized synchronized锁的特点 synchronized锁级别 无锁 偏向锁 轻量级锁 重量级锁 自旋锁 锁消除 ReentrantLock 公平锁和非公平锁 AQS ...
- synchronized 锁的是什么?
概述 本文我们将回答两个问题: synchronized 锁的是什么? 为什么 wait() 和 notify() 需要搭配 synchonized 关键字使用 ? 我将通过先介绍基础知识再回答问题的 ...
- Java多线程,锁(CAS,synchronized,AQS,ReentrantLock)
该博客只是个人学习的笔记.如果有什么疑问或者有什么不对的都可以告诉我,目前只写了多线程和锁的部分,因为只是个人学习记录的笔记,所以写的不是很详细,里面有一些个人的见解思考供各位参考. 一.多线程 关于 ...
- java 锁表后事务提交_关于synchronized锁在Spring事务中进行数据更新同步,仍出现线程安全问题...
#1 问题描述# 最近有小伙伴在做商品抽奖活动时,在对奖品库存进行扣减,有线程安全的问题,遂加锁synchronized进行同步,但发现加锁后并没有控制住库存线程安全的问题,导致库存仍被超发. 先简单 ...
- 关于synchronized锁在Spring事务中进行数据更新同步,仍出现线程安全问题
为什么80%的码农都做不了架构师?>>> #1 问题描述# 最近有小伙伴在做商品抽奖活动时,在对奖品库存进行扣减,有线程安全的问题,遂加锁synchronized进行同步,但发 ...
- 锁升级过程(无锁、偏向锁、轻量级锁、重量级锁)
文章目录 Synchronized锁升级的背景 Synchronized的性能变化 Java5之前,用户态和内核态之间的切换 为什么每个对象都可以称为一把锁? Java6开始优化Synchronize ...
- JVM内部锁升级过程(偏向锁,轻量级锁,重量级锁)
目录 对象在内存中是如何布局的 如何查看对象在内存中的布局 markword数据结构 加锁后发生了什么 偏向锁 什么是偏向锁 偏向锁定时hashCode 哪去了? 为什么需要偏向锁 为什么从JDK15 ...
最新文章
- python 之三级菜单
- 使用命令创建mysql_用命令创建MySQL数据库
- c语言 判断一个图是否全连通_C语言:程序运行流程图与顺序结构语句
- OpenGL Lighting models照明模型的实例
- PAT (Basic Level) 1039 到底买不买(模拟)
- Matlab传递函数的几种生成方式
- (47)VHDL实现8位奇偶校验电路(for loop语句)
- windows服务开发(一、安装)
- Brew Command Not Found
- 设计模式—工厂模式(思维导图)
- 80%的Oracle JDK用户正在寻找免费的替代品!!!
- Android的Splash界面支持用户点击
- 各个省份城市HTML,省份城市的三级联动.html
- c语言oct,【讨论】OCT扫描中的C-scan你知道吗????????
- 科技生活第一季:解读数字孪生概念 —— 智慧城市大脑
- JavaScript级联链表
- NFTScan 开发者平台推出多链 NFT 数据 Pro API 服务
- Constrained Joint CRF for Simultaneous FAUR and FLD
- 【音视频专题】音频质量评估方法那些事
- 直链下载Windows和office安装包,这个网站值得收藏
热门文章
- 管理员界面 用例, 功能说明书, 技术说明书
- 词缀temper/tempor/tempt/tend等词根衍生单词
- python画魄罗代码_《英雄联盟》官方超萌原画欣赏 百变小魄罗COS众英雄
- android开发--推箱子小游戏(二)
- FFmpeg —— 由pts控制视频播放速率(Qt计时器)
- Bin文件和Hex文件相互转换
- 有10亿个杂乱无章的数,怎样最快地求出其中前1000大的数
- 安全知识普及--总结什么是网络安全
- 校内模拟赛 旅行(by NiroBC)
- 涉密计算机审计报告范文,涉密信息安全保密审计报告