mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			65 lines
		
	
	
		
			1017 B
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1017 B
		
	
	
	
		
			Java
		
	
	
	
// Test that monitor locks work and are recursive.
 | 
						|
 | 
						|
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");
 | 
						|
  }
 | 
						|
}
 |