JAVA 多线程二

JAVA 多线程2
package com.test;

public class ThreadTest2
{

	public static void main(String[] args)
	{
		Bizs biz = new Bizs();
		
		ThreadAdd add1 = new ThreadAdd(biz);
		ThreadAdd add2 = new ThreadAdd(biz);
		
		ThreadSub sub1 = new ThreadSub(biz);
		ThreadSub sub2 = new ThreadSub(biz);
		
		sub1.start();
		sub2.start();
		
		add1.start();
		add2.start();
		
	}
}

class ThreadAdd extends Thread{
	
	private Bizs biz;
	
	public ThreadAdd(Bizs biz){
		this.biz = biz;
	}
	
	@Override
	public void run()
	{
		for (int i = 0; i < 100; i++)
		{
			try
			{
				Thread.sleep(100);
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
			biz.add();
		}
	}
}

class ThreadSub extends Thread{
	
	private Bizs biz;
	
	public ThreadSub(Bizs biz){
		this.biz = biz;
	}
	
	@Override
	public void run()
	{
		for (int i = 0; i < 100; i++)
		{
			try
			{
				Thread.sleep(100);
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
			biz.sub();
		}
		
	}
}

class Bizs{
	private int j = 0;
	
	public synchronized void add(){
		while(j > 0){
			try
			{
				this.wait();
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
		}
		System.out.println(++j);
		this.notifyAll();
	}
	
	public synchronized void sub(){
		while(j <= 0){
			try
			{
				this.wait();
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
		}
		System.out.println(--j);
		this.notifyAll();
	}
}