码迷,mamicode.com
首页 > 编程语言 > 详细

各个线程顺序循环执行

时间:2016-03-16 16:53:39      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:

问题描述: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个任务在执行....

各个线程顺序循环执行

标签:

原文地址:http://www.cnblogs.com/YDDMAX/p/5283732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!