import java.util.Random;
import java.util.concurrent.locks.*;

class SynObject 
{
	public static ReentrantLock lock = new ReentrantLock();
	public static Condition cond = lock.newCondition();
}
class AddNum extends Thread 
{
	private int[] a = null;
	private int max;
	private Random rand = new Random();
	public AddNum(int[] a, int max)
	{
		this.a = a;
		this.max = max;
	}
	public void run() 
	{
		while(true) 
		{
			SynObject.lock.lock();
			try
			{
				while(a[0]<max-100)
					SynObject.cond.await();
				a[0] += rand.nextInt(50);
				SynObject.cond.signalAll();
				System.out.println(getName()+" a[0]ֵΪ" + a[0]);
				if(a[0] >= max) 
					break;
			}catch (Exception e) 
			{
			}finally 
			{
				SynObject.lock.unlock();
			}
		}
	}
}
public class ThreadCooperation10_4 
{
	public static void main(String[] args) 
	{
		int[] a = {0};
		Thread t0 = new AddNum(a, 100);
		Thread t1 = new AddNum(a, 200);
		Thread t2 = new AddNum(a, 300);
		t2.start();
		t1.start();
		t0.start();
	}
}