📄 thread_interrupt.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{ // Return the number of Thread.yield()s we can do in 500ms. static long calibrate () { long i = 1; for (int tries = 0; tries < 40; tries++) { long t = System.currentTimeMillis(); for (long n = 0; n < i; n++) Thread.yield(); long t_prime = System.currentTimeMillis(); if (t_prime - t > 500) return i; i *= 2; } // We have no system clock. Give up. throw new RuntimeException ("We have no system clock."); } static long yields = calibrate (); public void run() { System.out.println ("Busy waiting"); int count = 0; for (long i=0; i < yields; 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."); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -