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锁的区别相关推荐

  1. 精确通知,顺序访问——Lock锁比synchronized锁的优势之处

    题目如下: 多线程之间按顺序调用,实现A->B->C 三个线程启动,要求如下: AA 打印5次,BB 打印10次,CC 打印15次 接着   AA 打印5次,BB 打印10次,CC 打印1 ...

  2. synchronized锁(方法锁, 代码块锁)

    synchronized锁可以解决线程安全问题,但是相应的,只要是锁,就会带来性能开销,所以尽可能减小锁的范围尤为重要. synchronized锁无非修饰普通方法,修饰静态方法,修饰代码块,我认为无 ...

  3. synchronized锁的级别和ReentrantLock锁(AQS)

    目录 synchronized synchronized锁的特点 synchronized锁级别 无锁 偏向锁 轻量级锁 重量级锁 自旋锁 锁消除 ReentrantLock 公平锁和非公平锁 AQS ...

  4. synchronized 锁的是什么?

    概述 本文我们将回答两个问题: synchronized 锁的是什么? 为什么 wait() 和 notify() 需要搭配 synchonized 关键字使用 ? 我将通过先介绍基础知识再回答问题的 ...

  5. Java多线程,锁(CAS,synchronized,AQS,ReentrantLock)

    该博客只是个人学习的笔记.如果有什么疑问或者有什么不对的都可以告诉我,目前只写了多线程和锁的部分,因为只是个人学习记录的笔记,所以写的不是很详细,里面有一些个人的见解思考供各位参考. 一.多线程 关于 ...

  6. java 锁表后事务提交_关于synchronized锁在Spring事务中进行数据更新同步,仍出现线程安全问题...

    #1 问题描述# 最近有小伙伴在做商品抽奖活动时,在对奖品库存进行扣减,有线程安全的问题,遂加锁synchronized进行同步,但发现加锁后并没有控制住库存线程安全的问题,导致库存仍被超发. 先简单 ...

  7. 关于synchronized锁在Spring事务中进行数据更新同步,仍出现线程安全问题

    为什么80%的码农都做不了架构师?>>>    #1 问题描述# 最近有小伙伴在做商品抽奖活动时,在对奖品库存进行扣减,有线程安全的问题,遂加锁synchronized进行同步,但发 ...

  8. 锁升级过程(无锁、偏向锁、轻量级锁、重量级锁)

    文章目录 Synchronized锁升级的背景 Synchronized的性能变化 Java5之前,用户态和内核态之间的切换 为什么每个对象都可以称为一把锁? Java6开始优化Synchronize ...

  9. JVM内部锁升级过程(偏向锁,轻量级锁,重量级锁)

    目录 对象在内存中是如何布局的 如何查看对象在内存中的布局 markword数据结构 加锁后发生了什么 偏向锁 什么是偏向锁 偏向锁定时hashCode 哪去了? 为什么需要偏向锁 为什么从JDK15 ...

最新文章

  1. python 之三级菜单
  2. 使用命令创建mysql_用命令创建MySQL数据库
  3. c语言 判断一个图是否全连通_C语言:程序运行流程图与顺序结构语句
  4. OpenGL Lighting models照明模型的实例
  5. PAT (Basic Level) 1039 到底买不买(模拟)
  6. Matlab传递函数的几种生成方式
  7. (47)VHDL实现8位奇偶校验电路(for loop语句)
  8. windows服务开发(一、安装)
  9. Brew Command Not Found
  10. 设计模式—工厂模式(思维导图)
  11. 80%的Oracle JDK用户正在寻找免费的替代品!!!
  12. Android的Splash界面支持用户点击
  13. 各个省份城市HTML,省份城市的三级联动.html
  14. c语言oct,【讨论】OCT扫描中的C-scan你知道吗????????
  15. 科技生活第一季:解读数字孪生概念 —— 智慧城市大脑
  16. JavaScript级联链表
  17. NFTScan 开发者平台推出多链 NFT 数据 Pro API 服务
  18. Constrained Joint CRF for Simultaneous FAUR and FLD
  19. 【音视频专题】音频质量评估方法那些事
  20. 直链下载Windows和office安装包,这个网站值得收藏

热门文章

  1. 管理员界面 用例, 功能说明书, 技术说明书
  2. 词缀temper/tempor/tempt/tend等词根衍生单词
  3. python画魄罗代码_《英雄联盟》官方超萌原画欣赏 百变小魄罗COS众英雄
  4. android开发--推箱子小游戏(二)
  5. FFmpeg —— 由pts控制视频播放速率(Qt计时器)
  6. Bin文件和Hex文件相互转换
  7. 有10亿个杂乱无章的数,怎样最快地求出其中前1000大的数
  8. 安全知识普及--总结什么是网络安全
  9. 校内模拟赛 旅行(by NiroBC)
  10. 涉密计算机审计报告范文,涉密信息安全保密审计报告