⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thread_interrupt.java

📁 俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)的全部源代码。
💻 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 + -