各個線程順序循環執行


問題描述: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個任務在執行....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM