Thread_Wait.java: New file.
2000-03-23 Bryce McKinlay <bryce@albatross.co.nz> * libjava.lang/Thread_Wait.java: New file. * libjava.lang/Thread_Sleep.java: New file. * libjava.lang/Thread_Monitor.java: New file. * libjava.lang/Thread_Wait.out: New file. * libjava.lang/Thread_Sleep.out: New file. * libjava.lang/Thread_Monitor.out: New file. * libjava.lang/Thread_Interrupt.java: New file. * libjava.lang/Thread_Wait_2.java: New file. * libjava.lang/Thread_Wait_2.out: New file. * libjava.lang/Thread_Wait_Interrupt.java: New file. * libjava.lang/Thread_Wait_Interrupt.out: New file. * libjava.lang/Thread_Interrupt.out: New file. * libjava.lang/Thread_Join.java: New file. * libjava.lang/Thread_Join.out: New file. * libjava.lang/Thread_Alive.java: New file. * libjava.lang/Thread_Alive.out: New file. From-SVN: r32706
This commit is contained in:
parent
8034da37ce
commit
e8904f655d
17 changed files with 683 additions and 0 deletions
144
libjava/testsuite/libjava.lang/Thread_Wait_2.java
Normal file
144
libjava/testsuite/libjava.lang/Thread_Wait_2.java
Normal file
|
@ -0,0 +1,144 @@
|
|||
// Create many threads waiting on a monitor. Interrupt some of them. Do the
|
||||
// others wake up correctly with notify() and/or notifyAll()?
|
||||
// Origin: Bryce McKinlay <bryce@albatross.co.nz>
|
||||
|
||||
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.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue