admin管理员组

文章数量:1599527

 多线程按顺序调用 , A->B->C

A打印5次,B打印10次,C打印15次

class ShareResource
{
	private int number = 1;
	//A :1 B:2 C:3
	private Lock lock = new ReentrantLock();
	private Condition c1 =lock.newCondition();
	private Condition c2 =lock.newCondition();
	private Condition c3 =lock.newCondition();
	public void prints5(){
		lock.lock();
		try
		{
			while(number!=1)
			{
				c1.await();
			}
			for(int i = 0; i < 5; i++)
			{
				System.out.println(Thread.currentThread().getName()+"\t"+i);
			}
			number =2;
			c2.signal();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
		lock.unlock();
		}
	}
	public void prints10(){
		lock.lock();
		try
		{
			while(number!=2)
			{
				c2.await();
			}
			for(int i = 0; i < 10; i++)
			{
				System.out.println(Thread.currentThread().getName()+"\t"+i);
			}
			number =3;
			c3.signal();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
		lock.unlock();
		}
	}
	public void prints15(){
		lock.lock();
		try
		{
			while(number!=3)
			{
				c3.await();
			}
			for(int i = 0; i < 15; i++)
			{
				System.out.println(Thread.currentThread().getName()+"\t"+i);
			}
			number =1;
			c1.signal();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
		lock.unlock();
		}
	}
}
public static void main(String args[]){
final ShareResource test = new ShareResource();
		new Thread(new Runnable(){
			public void run(){
				for(int i =0 ; i < 10; i++)
				{
					test.prints5();
				}
			}
		},"A").start();;
		new Thread(new Runnable(){
			public void run(){
				for(int i =0 ; i < 10; i++)
				{
					test.prints10();
				}
			}
		},"B").start();
		new Thread(new Runnable(){
			public void run(){
				for(int i =0 ; i < 10; i++)
				{
					test.prints15();
				}
			}
		},"C").start();
}

 

本文标签: 多个绑定代码ReentrantLockcondition