并发趣味问题之ABC
来源:互联网 发布:新网互联域名如何续费 编辑:程序博客网 时间:2024/06/06 00:25
问题描述:
当前三个线程A,B,C,三个成一组,总共执行10次。第一次执行的时候按照ABC的顺序执行,以后每组按照A–>B–>C–>A的回环顺序执行即可(即若开始为B那么之后就是C,接着是A;若开始是C那接着就是A,之后是B)。
我自己的实现方式,欢迎拍砖。
线程类
package gu;public class Father extends Thread{ private String myState; private String nextState; private Source source; public Source getSource() { return source; } public void setSource(Source source) { this.source = source; } public String getMyState() { return myState; } public void setMyState(String myState) { this.myState = myState; } public String getNextState() { return nextState; } public void setNextState(String nextState) { this.nextState = nextState; } public Father(String myState, String nextState, Source source) { this.myState = myState; this.nextState = nextState; this.source = source; } @Override public void run() { source.show(this); }}
虚拟资源类
package gu;public class Source{ private String state = "A"; private int count = 0; public String getState() { return state; } public void setState(String state) { this.state = state; } public synchronized void show(Father father) { if (count % 3 == 0 && count != 0) { setState(father.getMyState()); } if (!this.state.equals(father.getMyState())) { try { notifyAll(); wait(); show(father); } catch (InterruptedException e) { e.printStackTrace(); } } else { System.out.print(father.getMyState()); setState(father.getNextState()); count++ ; notifyAll(); if (count % 3 == 0 && count != 0) { System.out.println(); } } }}
测试类
package gu;public class Test{ public static void main(String[] args) { Source source = new Source(); for (int i = 0; i < 10; i++ ) { Father a = new Father("A", "B", source); Father b = new Father("B", "C", source); Father c = new Father("C", "A", source); a.start(); b.start(); c.start(); } }}
0 0
- 并发趣味问题之ABC
- 趣味问题之趣味数学
- 经典趣味数学问题之过河问题
- java并发---三线程打印ABC的问题
- C趣味编程之汉诺塔问题
- 2.1趣味数学之个人所得税问题
- 2.3趣味数学之分糖果问题
- 趣味程序之趣味系列
- 趣味算法之趣味素数
- 趣味算法之趣味分数
- 2.2趣味数学之存款获利最大化问题
- 趣味程序之古典与经典问题系列
- 灵机一动-趣味问题种种
- 趣味算法-背包问题
- 趣味问题精选!
- 经典趣味编程问题
- 面试趣味问题
- 趣味百题之趣味猜想
- int to SAFE_CHAR
- hadoop hbase metric名全解释
- VC++实现动画弹出/弹入式窗口
- 用户首选项NSUserDefaults
- Java程序员必备秘籍 Scala与Clojure函数式编程语言
- 并发趣味问题之ABC
- Android Studio
- 大牛博士是如何进行文献检索和阅读的
- swiper滑动实现幻灯片功能及swiper animate的动画特效
- JAVA关键字 static,finally
- leetcode Best Time to Buy and Sell Stock II
- JMS介绍:我对JMS的理解和认识
- 为什么nova计算节点上报的剩余磁盘空间为负数?
- image等比缩小