package org.shadow;

import java.util.concurrent.TimeUnit;

import java.util.concurrent.locks.Condition;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

/**

* @author shadow

* @description 基于一个ReentrantLock和三个conditon实现连续打印ABC

* @create 2018-03-26 9:57

**/

public class ABCross implements Runnable{

// 打印次数

private static final int COUNT = 15;

//锁

private static final Lock lock = new ReentrantLock();

// 下一个Condition

private final Condition next ;

// 当前Condition

private final Condition now ;

// 打印的字符

private char ch;

public ABCross(Condition next, Condition now, char ch) {

this.next = next;

this.now = now;

this.ch = ch;

}

@Override

public void run() {

try {

// 获取打印锁 进入临界区

lock.lock();

for (int i = 0; i < COUNT; i++) {

// 获取当前锁的

now.signal();

System.out.print(ch+" ");

if ((COUNT - 1) > i) {

// 当前线程让出锁并等待唤醒

next.await();

}

}

} catch (InterruptedException e) {

e.printStackTrace();

}finally {

lock.unlock();

}

}

public static void main(String[] args) throws InterruptedException {

//打印A线程的condition

Condition a = lock.newCondition();

//打印B线程的condition

Condition b = lock.newCondition();

//打印C线程的condition

Condition c = lock.newCondition();

new Thread(new ABCross(a, b, 'A'),"线程1 :").start();

TimeUnit.MILLISECONDS.sleep(10);

new Thread(new ABCross(b, c, 'B'),"线程2 :").start();

TimeUnit.MILLISECONDS.sleep(10);

new Thread(new ABCross(c, a, 'C'),"线程3 :").start();

TimeUnit.MILLISECONDS.sleep(10);

}

}

java 连续打印_Java实现连续打印ABC相关推荐

  1. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  2. 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)

    黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...

  3. SearchHit转成java对象_Java开发中最常犯的10个错误,你中招了吗?

    http://www.programcreek.com/2014/05/top-10-mistakes-java-developers-make/ 阅读目录 Array转ArrayList 判断一个数 ...

  4. x的平方加y平加xy的java语言_JAVA语言及网络编程-中国大学mooc-题库零氪

    第1章 认识Java语言 单元测验1 1.使用计算机处理数据,输入原始数据必须放在下列哪个步骤之后? A.申请内存空间 B.数据处理 C.输出处理结果 D.未包含在选项中 2.如果程序中出现单词&qu ...

  5. linux去掉java路径_Java显示目录文件列表和删除目录

    Java显示目录文件列表和删除目录 以d:\a目录为例,假设D:\a目录内的结构如下: d:\a |--a.sql |--back.log |--b | |--e | | |--1.txt | | | ...

  6. java练习_Java基础笔试练习(一)

    Java基础笔试练习(一) 1. 若在某一个类定义中定义有如下的方法: abstract void performDial( ); 该方法属于() ? A.本地方法 B.最终方法 C.静态方法 D.抽 ...

  7. 判断三角形java代码_java基础编程题之异常处理

    以下是刚开始学习java的基础编程题,每天持续更新java每个知识点的题目,持续练习,不断提高java基本功,培养编程能力.今天的练习的十八题是java的异常处理的使用. 1.检测年龄不能为负数和大于 ...

  8. java常见_Java 常用类

    一Object 老祖宗 java.lang.Object 1.所有的类直接或者间接继承父类Java认为所有的对象都具备一些基本的共性内容这些内容可以不断的向上抽取最终就抽取到了一个最顶层的类中(Obj ...

  9. java附加属性_Java 9附加流

    java附加属性 Java 9即将发布! 它不仅仅是Jigsaw项目 . (我也很惊讶.)它给平台带来了很多小的变化,我想一一看一下. 我将标记所有这些帖子,您可以在这里找到它们. 让我们从-开始 流 ...

最新文章

  1. servlet response 中文乱码
  2. Shell-流程控制
  3. php柱状图实现年龄分布,考官雅思写作小作文满分范文 柱状图:年龄分布
  4. 个基于TensorFlow的简单故事生成案例:带你了解LSTM
  5. python pyqt教程_『开发技巧』PyQt5入门教程
  6. mapstd matlab详解,Matlab自带的数据标准化方法(mapminmax和mapstd)详细解析
  7. 文献标识码、文献载体类型标识
  8. 在 Java 中将 Word 转换为 PDF
  9. 前端图片合成技术_Javascript 前端合成图片
  10. window启动activemq失败
  11. sprd 11.0修改关机弹框界面样式
  12. 小锤子要出来?老罗傲娇属性不再
  13. 助力无人船舶,开拓水上智能
  14. 爱奇艺SOAR探索与实践
  15. 华为gt3智能跑步计划体验:心率监测、gps轨迹、训练计划
  16. 企业微信对接网易七鱼机器人
  17. 中国录音制品出版情况分析:2020年中国共出版录音制品5312种,出版数量共计12194.67万盒(张)[图]
  18. 欢乐颂之鸿蒙系统,《欢乐颂3》开机惹众议,蒋欣王子文疑似被换?导演是这样回复的...
  19. 无聊的生活,无聊的世界
  20. 万网虚拟空间二级域名绑定子目录

热门文章

  1. R语言ggplot2可视化、在可视化区域中自定义添加多个大小不同矩形阴影区域、自定义配置大小不同矩形阴影区域的颜色(Adding multiple shadows/rectangles)
  2. R语言可视化分面图、假设检验、单变量分组多水平t检验并指定参考水平、可视化单变量分组多水平分面箱图(faceting boxplot)并添加显著性水平、指定显著性参考水平
  3. R语言Kmeans聚类、抽取聚类簇:fpc包的kmeansruns函数通过Calinski-Harabasz准则和平均轮廓系数(ASW)为Kmeans选择最优的聚类K值、并与层次聚类的最优K值进行比较
  4. R计算贝叶斯信息指标(Bayesian Information Criterion,BIC)实战
  5. R语言基础知识详解及概括
  6. plotly基于dataframe数据绘制股票蜡烛图(Candlestick)
  7. pip国内常用源及配置方式
  8. Li‘s 影像组学视频学习笔记(28)-ROI/病灶体积的计算、Li‘s have a solution and plan.
  9. python学习之第一课时--初始python
  10. 手机 html5评测,三款主流手机浏览器HTML5性能横向评测