题目如下:

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



package com.dym.juc;import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;class ShareResource{private int number=1;  //1:A  2:B  3:Cprivate Lock lock=new ReentrantLock();private Condition condition1=lock.newCondition();private Condition condition2=lock.newCondition();private Condition condition3=lock.newCondition();public void print5(){lock.lock();try {//1. 判断while (number!=1){condition1.await();}//2. 干活for (int i = 1; i <=5 ; i++) {System.out.println(Thread.currentThread().getName()+"\t"+i);}//3. 通知number=2;condition2.signal();} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}public void print10(){lock.lock();try {//1. 判断while (number!=2){condition2.await();}//2. 干活for (int i = 1; i <=10 ; i++) {System.out.println(Thread.currentThread().getName()+"\t"+i);}//3. 通知number=3;condition3.signal();} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}public void print15(){lock.lock();try {//1. 判断while (number!=3){condition3.await();}//2. 干活for (int i = 1; i <=15 ; i++) {System.out.println(Thread.currentThread().getName()+"\t"+i);}//3. 通知number=1;condition1.signal();} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}
}// 多线程之间按顺序调用,实现A-》B-》C
//  三个线程启动,要求如下:
//  AA 打印5次,BB 打印10次,CC 打印15次
//  接着
//   AA 打印5次,BB 打印10次,CC 打印15次
//  ......来10轮
/*1  高内聚低耦合的前提下,线程操作资源类2  判断/干活/通知3  多线程交互中,必须要防止多线程的虚假唤醒,也即(判断只用while,不能用if)4  标志位
*/public class ThreadOrderAccess {public static void main(String[] args) {ShareResource shareResource=new ShareResource();new Thread(()->{for (int i = 1; i <=10 ; i++) {shareResource.print5();}},"AA").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {shareResource.print10();}},"BB").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {shareResource.print15();}},"CC").start();}
}

精确通知,顺序访问——Lock锁比synchronized锁的优势之处相关推荐

  1. Lock锁与synchronized锁的区别

    Lock锁与synchronized锁的区别 1.synchronized锁是可以帮助我们自动开锁和关闭锁 2.Lock锁,我们最常用的是ReentrantLock重入锁,需要我们手动的开锁和手动关锁 ...

  2. 并发编程 Java 三把锁(Synchronized、ReentrantLock、ReadWriteLock)

    Synchronized synchronized 的 3 种用法: 指定加锁对象(代码块):对给定对象加锁,进入同步代码前要获得给定对象的锁. void resource1() {synchroni ...

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

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

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

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

  5. synchronized 锁的是什么?

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

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

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

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

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

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

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

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

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

最新文章

  1. 自动填充脚本使用及注意事项
  2. Services(服务)
  3. 终于有人把 SpringBoot 项目的Http客户端工具说清楚了!
  4. pytorch下载mnist超时解决方案
  5. creo导入特征怎么实体化_Creo/Proe云图抄数牙刷抄数造型
  6. python是如何实现进程池和线程池的_进程、线程、线程池和协程如何理解?
  7. 雪城大学信息安全讲义 五、竞态条件
  8. ttys和tty_Linux中tty、pty、pts的概念区别
  9. linux系统端口更换,在Linux中怎样修改httpd的端口号
  10. Liver Writer打开以前的日志/页面
  11. 软件常见出现缺陷的地方
  12. keepalived+lvs实现高可用的负载均衡
  13. word参考文献编号、引用、修改
  14. MySQL 窗函数 流动平均数 running average
  15. matlab kmeans 质心,KMeans_SPD_Matrices
  16. 软件测试 | 测试方案怎么写
  17. 一只小白,在学习delphi.感觉很吃力。。
  18. 牢记这一波CAD快捷键,制图速度坐火箭!
  19. android国家码
  20. 更透明的隐私设置和全新的APP资源库:iOS 14测试版深度体验~~~

热门文章

  1. 常见的跑马灯效果,无缝连接。mcake官网公告使用
  2. 剑指offer 面试31题
  3. sql中存储过程打印返回的记录集
  4. 禁止input输入框输入指定内容
  5. Android 高级UI设计笔记20:RecyclerView 的详解之RecyclerView添加Item点击事件
  6. 用python做自己主动化測试--绘制系统性能趋势图和科学计算
  7. sizeof之字节对齐
  8. AJAX中日历控件的应用
  9. nboot通过DNW下载并运行eboot.nb0
  10. 成功打开华三模拟器后,创建设备完成却启动设备失败