ce961468b7
2004-07-27 Bryce McKinlay <mckinlay@redhat.com> * testsuite/libjava.lang/TLtest.java: Reduce sleep time. * testsuite/libjava.lang/Thread_Alive.java: Remove old email address. Reduce sleep time. * testsuite/libjava.lang/Thread_HoldsLock.java: Modify to work around compiler bug. * testsuite/libjava.lang/Thread_Interrupt.java: Remove old email address. Reduce sleep times. Synchronize with target threads before attempting to interrupt them. Don't try to calibrate yeild count, instead, always loop for a fixed time. * testsuite/libjava.lang/Thread_Join.java: Remove old email address. * testsuite/libjava.lang/Thread_Monitor.java: Likewise. * testsuite/libjava.lang/Thread_Wait.java: Likewise. * testsuite/libjava.lang/Thread_Wait_2.java: Likewise. * testsuite/libjava.lang/Thread_Wait_Interrupt.java: Likewise. * testsuite/libjava.lang/pr179.java: Likewise. * testsuite/libjava.lang/Thread_Sleep.java: Likewise. Reduce sleep time. Remove upper bounds check on sleep time. From-SVN: r85248
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);
|
|
}
|
|
}
|
|
}
|