开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推

来源:互联网 发布:运动仿真软件哪个好 编辑:程序博客网 时间:2024/04/18 13:28

这三个线程分别为A,B,C,我们可以把这三个线程当成父,子,孙三个线程,每个线程要循环输出十次。然后要有一个类去完成他们的任务就是输出当前线程的名字,然后我们可以用condition实现三个线程的交替输出。

/** * 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C, * 每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示; * 如:ABCABC….依次递推 *  * PrintABC * 创建人:LBM * 时间:2016年11月25日-上午9:34:53  * @version 1.0.0 * */public class PrintABC {public static void main(String[] args) {PrintClass printClass = new PrintClass();new Thread(new Runnable() {@Overridepublic void run() {//线程Afor( int i=1;i<=10;i++){printClass.PrintNameA(i);}}},"A").start();new Thread(new Runnable() {//线程B@Overridepublic void run() {for( int i=1;i<=10;i++){printClass.PrintNameB(i);}}},"B").start();new Thread(new Runnable() {//线程C@Overridepublic void run() {for( int i=1;i<=10;i++){printClass.PrintNameC(i);}}},"C").start();}static  class PrintClass{private String flag = "A";Lock lock = new ReentrantLock();Condition conditionA = lock.newCondition();//控制A线程运行Condition conditionB = lock.newCondition();//控制B线程运行Condition conditionC = lock.newCondition();//控制C线程运行public void PrintNameA(int i){//线程A的任务lock.lock();while (!"A".equals(flag)) {try {conditionA.await();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}try{System.out.println("A线程第"+i+"次输出---"+Thread.currentThread().getName());flag ="B";conditionB.signal();}finally {lock.unlock();}}public void PrintNameB(int i){//线程B的任务lock.lock();while (!"B".equals(flag)) {try {conditionB.await();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}try{System.out.println("B线程第"+i+"次输出---"+Thread.currentThread().getName());flag ="C";conditionC.signal();}finally {lock.unlock();}}public void PrintNameC(int i){//线程C的任务lock.lock();while (!"C".equals(flag)) {try {conditionC.await();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}try{System.out.println("C线程第"+i+"次输出---"+Thread.currentThread().getName());flag ="A";conditionA.signal();}finally {lock.unlock();}}}}
打印结果如下:

A线程第1次输出---A
B线程第1次输出---B
C线程第1次输出---C
A线程第2次输出---A
B线程第2次输出---B
C线程第2次输出---C
A线程第3次输出---A
B线程第3次输出---B
C线程第3次输出---C
A线程第4次输出---A
B线程第4次输出---B
C线程第4次输出---C
A线程第5次输出---A
B线程第5次输出---B
C线程第5次输出---C
A线程第6次输出---A
B线程第6次输出---B
C线程第6次输出---C
A线程第7次输出---A
B线程第7次输出---B
C线程第7次输出---C
A线程第8次输出---A
B线程第8次输出---B
C线程第8次输出---C
A线程第9次输出---A
B线程第9次输出---B
C线程第9次输出---C
A线程第10次输出---A
B线程第10次输出---B
C线程第10次输出---C


1 0
原创粉丝点击