mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			157 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Java
		
	
	
	
| // Test interrupt() behaviour on a thread in wait(), sleep(), and spinning 
 | |
| // in a loop.
 | |
| 
 | |
| class ThreadBase extends Thread
 | |
| {
 | |
|   boolean ready = false;
 | |
|   
 | |
|   synchronized void ready()
 | |
|   {
 | |
|     ready = true;
 | |
|   }
 | |
| }
 | |
| 
 | |
| class Waiter extends ThreadBase
 | |
| {
 | |
|   public synchronized void run()
 | |
|   {
 | |
|     super.ready();
 | |
|     System.out.println ("wait()");
 | |
|     try
 | |
|     {
 | |
|       wait();
 | |
|       System.out.println("Error: wait() completed normally.");
 | |
|     }
 | |
|     catch (InterruptedException x)
 | |
|     {
 | |
|       if (isInterrupted() || interrupted()) 
 | |
|         System.out.println("Error: interrupt flag is still set.");
 | |
|     
 | |
|     }
 | |
|       System.out.println("interrupted - ok");
 | |
|   }
 | |
| }
 | |
| 
 | |
| class Sleeper extends ThreadBase
 | |
| {
 | |
|   public void run()
 | |
|   {
 | |
|     super.ready();
 | |
|     System.out.println ("sleep()");
 | |
|     try
 | |
|     {
 | |
|       sleep(5000);
 | |
|       System.out.println("Error: sleep() completed normally.");
 | |
|     }
 | |
|     catch (InterruptedException x)
 | |
|     {
 | |
|       if (isInterrupted() || interrupted()) 
 | |
|         System.out.println("Error: interrupt flag is still set.");
 | |
|     
 | |
|       System.out.println("interrupted - ok");
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| class Looper extends ThreadBase
 | |
| {
 | |
|   public void run()
 | |
|   {
 | |
|     super.ready();
 | |
|     System.out.println ("Busy waiting");
 | |
| 
 | |
|     int count = 0;
 | |
|     long start = System.currentTimeMillis();
 | |
|     while (true)
 | |
|       {
 | |
|         Thread.yield();
 | |
| 	if (isInterrupted ())
 | |
| 	  break;
 | |
| 	long now = System.currentTimeMillis();	
 | |
| 	if ((now - start) > 5000)
 | |
| 	  break;
 | |
|       }
 | |
|     synchronized (this)
 | |
|     {  
 | |
|       if (interrupted ())
 | |
| 	{
 | |
| 	  System.out.println ("interrupted - ok");
 | |
| 	  if (isInterrupted () || interrupted ())
 | |
| 	    System.out.println("Error: interrupt flag is still set.");
 | |
| 	}
 | |
|       else
 | |
| 	System.out.println ("Error: Busy wait was not interrupted.");          
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| class Joiner extends ThreadBase
 | |
| {
 | |
|   public void run()
 | |
|   {
 | |
|     super.ready();
 | |
|     System.out.println("join()");
 | |
|     try
 | |
|     {
 | |
|       join(2000);
 | |
|       System.out.println("Error: join() completed normally??!");
 | |
|     }
 | |
|     catch (InterruptedException x)
 | |
|     {
 | |
|       if (isInterrupted() || interrupted()) 
 | |
|         System.out.println("Error: interrupt flag is still set.");
 | |
|     
 | |
|       System.out.println("interrupted - ok");
 | |
|     }
 | |
| 
 | |
|   }
 | |
| }
 | |
| 
 | |
| public class Thread_Interrupt
 | |
| {
 | |
|   public static void main(String args[])
 | |
|   {
 | |
|     Waiter w = new Waiter();
 | |
|     w.start ();
 | |
|     sleep_and_interrupt (w);
 | |
|     
 | |
|     Sleeper s = new Sleeper();
 | |
|     s.start ();
 | |
|     sleep_and_interrupt (s);
 | |
| 
 | |
|     Looper l = new Looper ();
 | |
|     l.start ();
 | |
|     sleep_and_interrupt (l);
 | |
| 
 | |
|     Joiner j = new Joiner ();
 | |
|     j.start ();
 | |
|     sleep_and_interrupt (j);
 | |
|   }
 | |
|   
 | |
|   public static void sleep_and_interrupt(ThreadBase t)
 | |
|   {
 | |
|     try
 | |
|     {
 | |
|       synchronized (t)
 | |
|         {
 | |
| 	  while (!t.ready)
 | |
| 	    t.wait(10);
 | |
| 	}
 | |
|     
 | |
|       Thread.sleep (50);
 | |
|       t.interrupt ();
 | |
|       long t1 = System.currentTimeMillis();
 | |
|       t.join (5000);
 | |
|       long time = System.currentTimeMillis() - t1;
 | |
|       if (time > 2900)
 | |
|         {
 | |
| 	  System.out.println ("Error: join() from main thread timed out");
 | |
| 	}
 | |
|     }
 | |
|     catch (InterruptedException x)
 | |
|     {
 | |
|       System.out.println("Error: main thread interrupted.");
 | |
|     }
 | |
|   }
 | |
| }
 |