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();
}
}