问题描述:A任务执行完之后执行B任务,B任务执行之后再执行C任务,C任务执行完之后A再执行任务,以此循环下去
Task
1 package com.ydd.work.concurrent; 2 3 import java.util.concurrent.atomic.AtomicInteger; 4 /** 5 * 6 * @author yunzhu.ydd 7 * 8 */ 9 public class Task extends Thread {10 11 protected AtomicInteger flag;12 private int number;13 private int id;14 public Task( AtomicInteger flag,int number,int id)15 {16 this.flag=flag;17 this.number=number;18 this.id=id;19 }20 @Override21 public void run() {22 while(!Thread.interrupted())23 {24 synchronized(flag)25 {26 while(flag.get()!=id)27 {28 try {29 flag.wait();30 } catch (InterruptedException e) {31 // TODO Auto-generated catch block32 e.printStackTrace();33 }34 }35 }36 System.out.println("第"+id+"个任务在执行....");37 //其他的任务38 synchronized(flag)39 {40 flag.set((flag.get()+1)%number);41 flag.notifyAll();42 }43 }44 45 }46 47 }
Main
package com.ydd.work.concurrent;import java.util.concurrent.atomic.AtomicInteger;/** * * @author yunzhu.ydd * */public class Task extends Thread { protected AtomicInteger flag; private int number; private int id; public Task( AtomicInteger flag,int number,int id) { this.flag=flag; this.number=number; this.id=id; } @Override public void run() { while(!Thread.interrupted()) { synchronized(flag) { while(flag.get()!=id) { try { flag.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } System.out.println("第"+id+"个任务在执行...."); //其他的任务 synchronized(flag) { flag.set((flag.get()+1)%number); flag.notifyAll(); } } }}
结果:
第2个任务在执行....
第3个任务在执行....第4个任务在执行....第5个任务在执行....第6个任务在执行....第7个任务在执行....第8个任务在执行....第9个任务在执行....第0个任务在执行....第1个任务在执行....第2个任务在执行....第3个任务在执行....第4个任务在执行....第5个任务在执行....第6个任务在执行....第7个任务在执行....第8个任务在执行....第9个任务在执行....第0个任务在执行....第1个任务在执行....第2个任务在执行....第3个任务在执行....第4个任务在执行....第5个任务在执行....第6个任务在执行....第7个任务在执行....第8个任务在执行....第9个任务在执行....第0个任务在执行....第1个任务在执行....第2个任务在执行....第3个任务在执行....第4个任务在执行....第5个任务在执行....第6个任务在执行....第7个任务在执行....第8个任务在执行....第9个任务在执行....