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

📄 thread_wait_2.java

📁 this gcc-g++-3.3.1.tar.gz is a source file of gcc, you can learn more about gcc through this codes f
💻 JAVA
字号:
// Create many threads waiting on a monitor. Interrupt some of them. Do the // others wake up correctly with notify() and/or notifyAll()?// Origin: Bryce McKinlay <bryce@albatross.co.nz>import java.util.Vector;class Waiter extends Thread{  Object monitor;  int thread_num;  boolean interrupted = false;  boolean notified = false;  Waiter (Object monitor, int thread_num)  {    this.monitor = monitor;    this.thread_num = thread_num;  }      public void run()  {    synchronized (monitor)      {	try	{	  monitor.wait();	  notified = true;	}	catch (InterruptedException x)	{	  interrupted = true;	}      }      }}public class Thread_Wait_2{  static Vector threads;  static Object monitor = new Object();    static final int NUM_THREADS = 10;    public static void main(String args[])  {            try    {      makeThreads ();            Thread.sleep(250);            // Interrupt a few threads...      Waiter i1 = (Waiter) threads.elementAt(3);      Waiter i2 = (Waiter) threads.elementAt(4);      Waiter i3 = (Waiter) threads.elementAt(9);      i1.interrupt();      i2.interrupt();      i3.interrupt();            // Call notify the exact number of times required to wake the remaining      // threads.      synchronized (monitor)      {	for (int i=0; i < NUM_THREADS -3 ; i++)	{	  monitor.notify ();	}      }            joinAll();      printStatus();            // Repeat all the above, but use notifyAll() instead.      makeThreads();      Thread.sleep(250);            // Interrupt a few threads...      i1 = (Waiter) threads.elementAt(0);      i2 = (Waiter) threads.elementAt(1);      i3 = (Waiter) threads.elementAt(9);      i1.interrupt();      i2.interrupt();      i3.interrupt();            // Call notifyAll to wake the remaining threads.      synchronized (monitor)      {        monitor.notifyAll ();      }      joinAll();      printStatus();    }    catch (InterruptedException x)    {      System.out.println (x);    }  }    static void makeThreads()  {    threads = new Vector(NUM_THREADS);        for (int i=0; i < NUM_THREADS; i++)      {	Waiter w = new Waiter(monitor, i);	w.start();	threads.addElement(w);      }  }    static void joinAll()  {    try    {      for (int i=0; i < threads.size(); i++)	{          Thread t = (Thread) threads.elementAt(i);	  t.join();	}    }    catch (InterruptedException x) {}  }    static void printStatus()  {    for (int i=0; i < threads.size(); i++)      {        Waiter w = (Waiter) threads.elementAt(i);	if (w.interrupted)	  System.out.println (i + " interrupted.");	if (w.notified)	  System.out.println (i + " notified.");      }  }  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -