问题描述: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 @Override 21 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 block 32 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;}@Overridepublic void run() {while(!Thread.interrupted()){synchronized(flag){while(flag.get()!=id){try {flag.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.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个任务在执行....