gcc/libjava/testsuite/libjava.lang/Thread_Wait_2.java
Bryce McKinlay ce961468b7 TLtest.java: Reduce sleep time.
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
2004-07-28 03:44:06 +01:00

144 lines
2.6 KiB
Java

// Create many threads waiting on a monitor. Interrupt some of them. Do the
// others wake up correctly with notify() and/or notifyAll()?
import java.util.Vector;
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)
{
try
{
monitor.wait();
notified = true;
}
catch (InterruptedException x)
{
interrupted = true;
}
}
}
}
public class Thread_Wait_2
{
static Vector threads;
static Object monitor = new Object();
static final int NUM_THREADS = 10;
public static void main(String args[])
{
try
{
makeThreads ();
Thread.sleep(250);
// Interrupt a few threads...
Waiter i1 = (Waiter) threads.elementAt(3);
Waiter i2 = (Waiter) threads.elementAt(4);
Waiter i3 = (Waiter) threads.elementAt(9);
i1.interrupt();
i2.interrupt();
i3.interrupt();
// Call notify the exact number of times required to wake the remaining
// threads.
synchronized (monitor)
{
for (int i=0; i < NUM_THREADS -3 ; i++)
{
monitor.notify ();
}
}
joinAll();
printStatus();
// Repeat all the above, but use notifyAll() instead.
makeThreads();
Thread.sleep(250);
// Interrupt a few threads...
i1 = (Waiter) threads.elementAt(0);
i2 = (Waiter) threads.elementAt(1);
i3 = (Waiter) threads.elementAt(9);
i1.interrupt();
i2.interrupt();
i3.interrupt();
// Call notifyAll to wake the remaining threads.
synchronized (monitor)
{
monitor.notifyAll ();
}
joinAll();
printStatus();
}
catch (InterruptedException x)
{
System.out.println (x);
}
}
static void makeThreads()
{
threads = new Vector(NUM_THREADS);
for (int i=0; i < NUM_THREADS; i++)
{
Waiter w = new Waiter(monitor, i);
w.start();
threads.addElement(w);
}
}
static void joinAll()
{
try
{
for (int i=0; i < threads.size(); i++)
{
Thread t = (Thread) threads.elementAt(i);
t.join();
}
}
catch (InterruptedException x) {}
}
static void printStatus()
{
for (int i=0; i < threads.size(); i++)
{
Waiter w = (Waiter) threads.elementAt(i);
if (w.interrupted)
System.out.println (i + " interrupted.");
if (w.notified)
System.out.println (i + " notified.");
}
}
}