summaryrefslogtreecommitdiff
path: root/libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java
diff options
context:
space:
mode:
authorBryce McKinlay <bryce@albatross.co.nz>2000-03-23 12:35:44 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2000-03-23 12:35:44 +0000
commite8904f655d46ac43f0d859b8c467bb567dcf4775 (patch)
treeb8f3ddf8bdcae58d2eff8369b44d65dcfb4363fb /libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java
parent8034da37ce34e442aa8e04f3f1618b70b00ed10e (diff)
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
Diffstat (limited to 'libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java')
-rw-r--r--libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java76
1 files changed, 76 insertions, 0 deletions
diff --git a/libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java b/libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java
new file mode 100644
index 00000000000..be7b5551614
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java
@@ -0,0 +1,76 @@
+// Create two threads waiting on a monitor. Interrupt one of them. Does the
+// other wake up correctly?
+// Origin: Bryce McKinlay <bryce@albatross.co.nz>
+
+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);
+ }
+ }
+}