• 各个线程顺序循环执行


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

  • 相关阅读:
    MS对SharePoint的支持力度...?
    一个很Cool的特性
    朋友landws做的一个ORM Component
    今天才知道原来IE扩展了一个showModalDialog()
    解决了那个SharePoint的小问题
    工作、SOA、MBF…
    DiskBased Caching in Whidbey, Longhorn...
    昨晚上写的关于IBuySpy里面用户权限验证方面的东西
    昨晚上写的关于IBuySpy里面用户权限验证方面的东西
    加入定制的WebService到SharePoint站点中
  • 原文地址:https://www.cnblogs.com/YDDMAX/p/5283732.html
Copyright © 2020-2023  润新知