mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-26 03:08:57 +08:00
135 lines
2.7 KiB
Java
135 lines
2.7 KiB
Java
|
// Test interrupt() behaviour on a thread in wait(), sleep(), and spinning
|
||
|
// in a loop.
|
||
|
// Origin: Bryce McKinlay <bryce@albatross.co.nz>
|
||
|
|
||
|
class Waiter extends Thread
|
||
|
{
|
||
|
public synchronized void run()
|
||
|
{
|
||
|
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 Thread
|
||
|
{
|
||
|
public void run()
|
||
|
{
|
||
|
System.out.println ("sleep()");
|
||
|
try
|
||
|
{
|
||
|
sleep(2000);
|
||
|
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 Thread
|
||
|
{
|
||
|
public void run()
|
||
|
{
|
||
|
System.out.println ("Busy waiting");
|
||
|
|
||
|
int count = 0;
|
||
|
for (int i=0; i < 1000000; i++)
|
||
|
{
|
||
|
Thread.yield();
|
||
|
count += 5;
|
||
|
if (isInterrupted ())
|
||
|
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 Thread
|
||
|
{
|
||
|
public void run()
|
||
|
{
|
||
|
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(Thread t)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
Thread.sleep (250);
|
||
|
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.");
|
||
|
}
|
||
|
}
|
||
|
}
|