mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Java
		
	
	
	
| // Create two threads waiting on a monitor. Interrupt one of them. Does the 
 | |
| // other wake up correctly?
 | |
| 
 | |
| class Waiter extends Thread
 | |
| {
 | |
|   Object monitor;
 | |
|   int thread_num;
 | |
|   boolean interrupted = false;
 | |
|   boolean notified = false; 
 | |
| 
 | |
|   Waiter (Object monitor, int thread_num)
 | |
|   {
 | |
|     this.monitor = monitor;
 | |
|     this.thread_num = thread_num;
 | |
|   }
 | |
|   
 | |
|   public void run()
 | |
|   {
 | |
|     synchronized (monitor)
 | |
|       {
 | |
|         System.out.println ("Thread waiting.");
 | |
| 	try
 | |
| 	{
 | |
| 	  long start = System.currentTimeMillis();
 | |
| 	  monitor.wait(1000);
 | |
| 	  long time = System.currentTimeMillis() - start;
 | |
| 	  if (time > 990)
 | |
| 	    System.out.println ("Error: wait on thread " + thread_num 
 | |
| 	                        + " timed out.");
 | |
| 	  else
 | |
| 	    notified = true;
 | |
| 	}
 | |
| 	catch (InterruptedException x)
 | |
| 	{
 | |
| 	  interrupted = true;
 | |
| 	}
 | |
|       }
 | |
|     
 | |
|   }
 | |
| }
 | |
| 
 | |
| public class Thread_Wait_Interrupt
 | |
| {
 | |
|   public static void main(String args[])
 | |
|   {
 | |
|     Object monitor = new Object();
 | |
|     Waiter w1 = new Waiter(monitor, 1);
 | |
|     Waiter w2 = new Waiter(monitor, 2);
 | |
|     w1.start();
 | |
|     w2.start();
 | |
|     try
 | |
|     {
 | |
|       Thread.sleep(250);
 | |
| 
 | |
|       synchronized (monitor)
 | |
|       {
 | |
| 	w1.interrupt();
 | |
| 	monitor.notify();
 | |
|       }
 | |
| 
 | |
|       w1.join();
 | |
|       w2.join();
 | |
|       System.out.println("join ok");
 | |
|       System.out.println("Thread 1 " + 
 | |
|                          (w1.interrupted ? "interrupted ok" : "error"));
 | |
|       System.out.println("Thread 2 " +
 | |
|                          (w2.notified ? "notified ok" : "error"));
 | |
| 
 | |
|     }
 | |
|     catch (InterruptedException x)
 | |
|     {
 | |
|       System.out.println (x);
 | |
|     }
 | |
|   }
 | |
| }
 |