public class GetOUt {
  public PrintOne p1;
  public PrintTwo p2;
  public  int  cout;
  private Object xlock=new Object();
  public GetOUt() {
  p1=new PrintOne();
  p2=new PrintTwo();
  cout=0;
  }
  public void PrinteFirst() throws Exception {
     
     while(true)
      {
       synchronized (xlock){
       cout++;
       if (cout>0){
       xlock.notifyAll();
       }
       System.out.println("1:"+cout);
      
      }
      Thread.sleep(500);
    }
  }
  public void PrinteSencond() throws Exception {
    
      while(true)
      {
       synchronized (xlock) {
       if (cout<=0){
       xlock.wait();
       }
       cout--;
       System.out.println("2:"+cout);
       }
       Thread.sleep(1000);
    }
  }
  class PrintOne extends Thread{
    public void run() {
      try {
        PrinteFirst();
      }
      catch (Exception ex) {
        System.out.println(ex.getMessage() );
      }
    }
  }
  class PrintTwo extends Thread{
    public void run(){
      try {
        PrinteSencond();
      }
      catch (Exception ex) {
        System.out.println(ex.getMessage() );
      }
    }
  }  public static void main(String[] args) {
    GetOUt gt = new GetOUt();
    gt.p1.start();
    gt.p2.start();
  }
}