mirror of
https://github.com/2003scape/deep-c-rsc.git
synced 2024-03-22 05:49:51 -04:00
152 lines
4.6 KiB
Java
152 lines
4.6 KiB
Java
|
|
||
|
// Thread interruption tests
|
||
|
|
||
|
import java.io.*;
|
||
|
|
||
|
class Thread$1 extends Thread {
|
||
|
public void run() {
|
||
|
synchronized(this) {
|
||
|
try {
|
||
|
wait(100000);
|
||
|
System.out.println("FAIL: returned from wait");
|
||
|
} catch (InterruptedException e) {
|
||
|
if (isInterrupted() || interrupted()) {
|
||
|
System.out.println(
|
||
|
"FAIL: interrupted flag has been turned on.");
|
||
|
} else {
|
||
|
System.out.println("Success 0a.");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
class Thread$2 extends Thread {
|
||
|
public void run() {
|
||
|
try {
|
||
|
Thread.sleep(50000);
|
||
|
System.out.println("FAIL: returned from sleep");
|
||
|
} catch (InterruptedException e) {
|
||
|
if (isInterrupted() || interrupted()) {
|
||
|
System.out.println(
|
||
|
"FAIL: interrupted flag has been turned on.");
|
||
|
} else {
|
||
|
System.out.println("Success 0b.");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
class Thread$3 extends Thread {
|
||
|
public void run() {
|
||
|
synchronized (this) {
|
||
|
try {
|
||
|
wait(100000);
|
||
|
} catch (InterruptedException e) {
|
||
|
if (isInterrupted() || interrupted()) {
|
||
|
System.out.println(
|
||
|
"FAIL: interrupted flag has been turned on.");
|
||
|
}
|
||
|
}
|
||
|
if (isInterrupted() || interrupted()) {
|
||
|
System.out.println(
|
||
|
"FAIL: interrupted flag has been turned on.");
|
||
|
}
|
||
|
try {
|
||
|
Thread.sleep(1000);
|
||
|
} catch (InterruptedException e) {
|
||
|
System.out.println("FAIL: " + e);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
class Thread$4 extends Thread {
|
||
|
public void run() {
|
||
|
try {
|
||
|
Thread.sleep(3000);
|
||
|
} catch (InterruptedException _) { }
|
||
|
System.out.println("Failure 4/5.: Time out.");
|
||
|
System.exit(-1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public class ThreadInterrupt {
|
||
|
public static void main(String av[]) throws Exception {
|
||
|
long time = System.currentTimeMillis();
|
||
|
Thread t;
|
||
|
t = new Thread$1();
|
||
|
ThreadInterrupt.ssij(t);
|
||
|
t = new Thread$2();
|
||
|
ThreadInterrupt.ssij(t);
|
||
|
t = new Thread$3();
|
||
|
t.start();
|
||
|
t.suspend();
|
||
|
Thread.sleep(10);
|
||
|
t.resume();
|
||
|
Thread.sleep(1000);
|
||
|
synchronized(t) {
|
||
|
t.interrupt();
|
||
|
if (t.isInterrupted()) {
|
||
|
System.out.println("Success 1.");
|
||
|
} else {
|
||
|
System.out.println("Failure 1.");
|
||
|
}
|
||
|
// make sure isInterrupted doesn't clear the flag.
|
||
|
if (t.isInterrupted()) {
|
||
|
System.out.println("Success 2.");
|
||
|
} else {
|
||
|
System.out.println("Failure 2.");
|
||
|
}
|
||
|
}
|
||
|
Thread.sleep(1000); // let thread finish
|
||
|
if (t.isInterrupted()) {
|
||
|
System.out.println("Failure 3.");
|
||
|
} else {
|
||
|
System.out.println("Success 3.");
|
||
|
}
|
||
|
t.join();
|
||
|
Thread watchdog = new Thread$4();
|
||
|
watchdog.start();
|
||
|
Thread me = Thread.currentThread();
|
||
|
me.interrupt();
|
||
|
synchronized(me) {
|
||
|
try {
|
||
|
me.wait(40000);
|
||
|
System.out.println("Failure 4.");
|
||
|
} catch (InterruptedException e) {
|
||
|
System.out.println("Success 4.");
|
||
|
}
|
||
|
|
||
|
me.interrupt();
|
||
|
try {
|
||
|
Thread.sleep(40000);
|
||
|
System.out.println("Failure 5.");
|
||
|
} catch (InterruptedException e) {
|
||
|
System.out.println("Success 5.");
|
||
|
}
|
||
|
}
|
||
|
System.out.println("Time: " + (int)(System.currentTimeMillis() - time));
|
||
|
System.exit(0);
|
||
|
}
|
||
|
|
||
|
static void ssij(Thread t) {
|
||
|
t.start();
|
||
|
try {
|
||
|
Thread.sleep(1000);
|
||
|
t.interrupt();
|
||
|
t.join();
|
||
|
} catch (InterruptedException e) {
|
||
|
System.out.println("caught " + e);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/* Expected Output:
|
||
|
Success 0a.
|
||
|
Success 0b.
|
||
|
Success 1.
|
||
|
Success 2.
|
||
|
Success 3.
|
||
|
Success 4.
|
||
|
Success 5.
|
||
|
*/
|