// Test that monitor locks work and are recursive.
// Origin: Bryce McKinlay <bryce@albatross.co.nz>

class T implements Runnable
{
  public int count = 0;
  Counter c;
  
  public T (Counter c)
  {
    this.c = c;
  }

  public void run()
  {
    while (true)
      {
        // NOTE: double-synchronization here.
	synchronized (c)
	{
	  if (c.getCount() <= 100000)
	    count++;
	  else
	    break;
	}
      }
  }
}

class Counter
{
  int i = 0;
  public synchronized int getCount ()
  {
    return ++i; 
  }
}

public class Thread_Monitor
{
  public static void main(String args[])
  {
    Counter c = new Counter();
    T t1 = new T(c);
    T t2 = new T(c);
    
    Thread th1 = new Thread(t1);
    Thread th2 = new Thread(t2);
    th1.start();
    th2.start();
    try
    {
      th1.join();
      th2.join();
    } 
    catch (InterruptedException x)
    {
      System.out.println("failed: Interrupted");
    }
    if (t1.count + t2.count == 100000)
      System.out.println ("ok");
    else
      System.out.println ("failed: total count incorrect");
  }
}
