各个线程顺序循环执行
问题描述: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; } @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个任务在执行....