summaryrefslogtreecommitdiff
path: root/libjava/testsuite/libjava.lang/Thread_Interrupt.java
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /libjava/testsuite/libjava.lang/Thread_Interrupt.java
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'libjava/testsuite/libjava.lang/Thread_Interrupt.java')
-rw-r--r--libjava/testsuite/libjava.lang/Thread_Interrupt.java156
1 files changed, 156 insertions, 0 deletions
diff --git a/libjava/testsuite/libjava.lang/Thread_Interrupt.java b/libjava/testsuite/libjava.lang/Thread_Interrupt.java
new file mode 100644
index 000000000..a69247422
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/Thread_Interrupt.java
@@ -0,0 +1,156 @@
+// Test interrupt() behaviour on a thread in wait(), sleep(), and spinning
+// in a loop.
+
+class ThreadBase extends Thread
+{
+ boolean ready = false;
+
+ synchronized void ready()
+ {
+ ready = true;
+ }
+}
+
+class Waiter extends ThreadBase
+{
+ public synchronized void run()
+ {
+ super.ready();
+ System.out.println ("wait()");
+ try
+ {
+ wait();
+ System.out.println("Error: wait() completed normally.");
+ }
+ catch (InterruptedException x)
+ {
+ if (isInterrupted() || interrupted())
+ System.out.println("Error: interrupt flag is still set.");
+
+ }
+ System.out.println("interrupted - ok");
+ }
+}
+
+class Sleeper extends ThreadBase
+{
+ public void run()
+ {
+ super.ready();
+ System.out.println ("sleep()");
+ try
+ {
+ sleep(5000);
+ System.out.println("Error: sleep() completed normally.");
+ }
+ catch (InterruptedException x)
+ {
+ if (isInterrupted() || interrupted())
+ System.out.println("Error: interrupt flag is still set.");
+
+ System.out.println("interrupted - ok");
+ }
+ }
+}
+
+class Looper extends ThreadBase
+{
+ public void run()
+ {
+ super.ready();
+ System.out.println ("Busy waiting");
+
+ int count = 0;
+ long start = System.currentTimeMillis();
+ while (true)
+ {
+ Thread.yield();
+ if (isInterrupted ())
+ break;
+ long now = System.currentTimeMillis();
+ if ((now - start) > 5000)
+ break;
+ }
+ synchronized (this)
+ {
+ if (interrupted ())
+ {
+ System.out.println ("interrupted - ok");
+ if (isInterrupted () || interrupted ())
+ System.out.println("Error: interrupt flag is still set.");
+ }
+ else
+ System.out.println ("Error: Busy wait was not interrupted.");
+ }
+ }
+}
+
+class Joiner extends ThreadBase
+{
+ public void run()
+ {
+ super.ready();
+ System.out.println("join()");
+ try
+ {
+ join(2000);
+ System.out.println("Error: join() completed normally??!");
+ }
+ catch (InterruptedException x)
+ {
+ if (isInterrupted() || interrupted())
+ System.out.println("Error: interrupt flag is still set.");
+
+ System.out.println("interrupted - ok");
+ }
+
+ }
+}
+
+public class Thread_Interrupt
+{
+ public static void main(String args[])
+ {
+ Waiter w = new Waiter();
+ w.start ();
+ sleep_and_interrupt (w);
+
+ Sleeper s = new Sleeper();
+ s.start ();
+ sleep_and_interrupt (s);
+
+ Looper l = new Looper ();
+ l.start ();
+ sleep_and_interrupt (l);
+
+ Joiner j = new Joiner ();
+ j.start ();
+ sleep_and_interrupt (j);
+ }
+
+ public static void sleep_and_interrupt(ThreadBase t)
+ {
+ try
+ {
+ synchronized (t)
+ {
+ while (!t.ready)
+ t.wait(10);
+ }
+
+ Thread.sleep (50);
+ t.interrupt ();
+ long t1 = System.currentTimeMillis();
+ t.join (5000);
+ long time = System.currentTimeMillis() - t1;
+ if (time > 2900)
+ {
+ System.out.println ("Error: join() from main thread timed out");
+ }
+ }
+ catch (InterruptedException x)
+ {
+ System.out.println("Error: main thread interrupted.");
+ }
+ }
+}