专栏首页大大的微笑Condition控制线程通信:java三个线程循环打印ABC

Condition控制线程通信:java三个线程循环打印ABC

private Lock lock = new ReentrantLock();
	private Condition c1 = lock.newCondition();
	private Condition c2 = lock.newCondition();
	private Condition c3 = lock.newCondition();
	private int remark = 1;//

	public static void main(String[] args) throws InterruptedException {
		final ConditionTest test = new ConditionTest();
		new Thread(new Runnable() {
			@Override
			public void run() {
				while (true) {
					test.printA();
				}
	
			}
		}, "A").start();

		new Thread(new Runnable() {

			@Override
			public void run() {
				while (true) {
					test.printB();
				}
				

			}
		}, "B").start();

		new Thread(new Runnable() {

			@Override
			public void run() {
				while (true) {
					test.printC();
				}
	
			}
		}, "C").start();

	}

	public void printA() {
		lock.lock();
		if (remark != 1) {
			try {
				c1.await();
			} catch (InterruptedException e) {
			}
		}
		remark = 2;
		c2.signalAll();//依次唤醒下一个需要打印的线程
		System.out.print(Thread.currentThread().getName());
		lock.unlock();
	}

	public void printB() {
		lock.lock();
		if (remark != 2) {
			try {
				c2.await();
			} catch (InterruptedException e) {
			}
		}
		remark = 3;
		c3.signalAll();
		System.out.print(Thread.currentThread().getName());
		lock.unlock();
	}

	public void printC() {
		lock.lock();
		if (remark != 3) {
			try {
				c3.await();
			} catch (InterruptedException e) {
			}
		}
		remark = 1;
		c1.signalAll();
		System.out.print(Thread.currentThread().getName() + "\t");
		lock.unlock();
	}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 写一个BASIC认证的https协议

    仅供参考,转载请注明出处,谢谢 /**      * BASIC认证的https      * @param urlStr https请求的...

    用户1215919
  • 返回执行结果的任务队列:ExecutorCompletionService

    有时候我们需要展示一些内容,如果等所有内容都加载完毕再展示这样反而会降低用户体验; 因为如果消耗时间长那么用户需要瞪着空白的页面,反而会失去兴趣; 所以我们...

    用户1215919
  • java使用mina和websocket通信

    这里以mina整合springMVC为例: //springMVC的配置: <!-- mina --> <bean class="org.spring...

    用户1215919
  • 设计模式(2):观察者模式-2 (委托、事件)

    概念:对某个方法引用的一种引用类型变量。注意看概念, 委托是一种引用类型变量, 类型变量,因此可以将委托当作方法的参数进行传递。 通俗点来讲,委托有点像方法的快...

    用户2434869
  • Java-匿名子类(匿名内部类)

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)

    Fisherman渔夫
  • Excel解析工具easyexcel全面探索

    之前我们想到Excel解析一般是使用POI,但POI存在一个严重的问题,就是非常消耗内存。所以阿里人员对它进行了重写从而诞生了easyexcel,它解决了过于消...

    老梁
  • 7.Sentinel源码分析—Sentinel是怎么和控制台通信的?

    在看我的这篇文章之前大家可以先看一下官方的这篇文章:https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%...

    luozhiyun
  • 7.Sentinel源码分析—Sentinel是怎么和控制台通信的?

    在看我的这篇文章之前大家可以先看一下官方的这篇文章:https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%...

    luozhiyun
  • 一步一步学lucene——(第三步:索引篇)

    在前面概要的了解了lucene的内容下面就深入一下lucene的各个模块。这里我们主要深入一下lucene的索引,就是如何构建索引的过程及概念。 lucene与...

    cloudskyme
  • 2018第一弹,小程序的两个入口“消失”了!

    首先,萤连长先辟个谣! 近期网上流传一张微信公众号终于要做信息流的朋友圈截图,广为流传。大家都觉得,微信公众号信息流时代即将到来。 为此,萤连长已经咨询过官方,...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券