package com.orderPC;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; /**
* 执行A,然后B,然后C,然后A
*/ public class ProductC {
public static void main(String[] args) {
Data3 data3 = new Data3();
new Thread(()->{
for (int i = 0; i <5 ; i++) {
data3.printA();
} },"A").start();
new Thread(()->{
for (int i = 0; i < 5; i++) {
data3.printB(); }
},"B").start();
new Thread(()->{
for (int i = 0; i < 5; i++) {
data3.printC(); }
},"C").start();
}
} //资源类
class Data3{
private Lock lock = new ReentrantLock();
Condition condition1 = lock.newCondition();
Condition condition2 = lock.newCondition();
Condition condition3 = lock.newCondition();
private int num = 1; public void printA(){
lock.lock();
try {
while(num != 1){
//等待
condition1.await();
}
System.out.println(Thread.currentThread().getName()+"-->AAA");
num=2;
//唤醒,唤醒指定的
condition2.signal();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
} }
public void printB(){
lock.lock(); try {
while(num !=2 ){
condition2.await();
}
System.out.println(Thread.currentThread().getName()+"-->BBB");
num =3;
//唤醒指定线程
condition3.signal(); } catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
} }
public void printC(){
lock.lock(); try {
while(num != 3){
//等待
condition3.await();
}
System.out.println(Thread.currentThread().getName()+"-->CCC");
num = 1;
condition1.signal(); } catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
} } }

最新文章

  1. sql 入门经典(第五版) Ryan Stephens 学习笔记 后续——存储引擎
  2. 你是否还在质疑EF的性能
  3. openwrt的环境搭建、定制和编译
  4. psql-07表:分区表
  5. HTML基础 - &lt;base&gt;标签的使用
  6. vim自动补全:go
  7. 【转】HTML中A标签与click事件的前世今生
  8. voa 2015.4.29
  9. vi命令插入
  10. MAC 调用GCC 提示xcrun: error: invalid active developer path
  11. 迅雷磁力链接转BT种子工具
  12. C libraries in Linux
  13. git 对比两个分支差异
  14. 浅谈对MVC的认识
  15. R下载package的一些小问题
  16. js对字符串进行加密和解密方法!
  17. 【性能测试】:loadrunner直压MYSQL数据库的脚本开发
  18. Javascript--将十进制数字转换成罗马数字显示
  19. Qt中父子widget的事件传递
  20. codeforces 484B - LubaAndTicket - 贪心

热门文章

  1. MySQL表操作过程的基础代码解析
  2. 皮皮调度(1)——从Airflow到DolphinScheduler,以及“皮皮调度”的来历
  3. 高效能团队的Java研发规范(进阶版)
  4. 在Go中如何正确重试请求
  5. 常见docker命令(二)-容器生命周期相关
  6. Docker 04 容器命令
  7. 前端 | HTML5基础知识
  8. PHP为任意页面设访问密码
  9. spark 执行spark-example
  10. C# 中的那些锁,在内核态都是怎么保证同步的?