无涯教程-Java - 线程控制函数

58 阅读2分钟

核心Java提供了对多线程程序的完全控制,您可以开发一个多线程程序,该程序可以根据您的要求完全挂起,恢复或停止。您可以对线程对象使用各种静态方法来控制其行为。下表列出了这些方法-

Sr.No. Method & Remark
1

public void suspend()

该方法将线程置于挂起状态,可以使用resume()方法恢复该线程。

2

public void stop()

此方法完全停止线程。

3

public void resume()

此方法恢复一个线程,该线程已使用suspend()方法挂起。

4

public void wait()

使当前线程等待,直到另一个线程调用notify()。

5

public void notify()

唤醒正在此对象的监视器上等待的单个线程。

请注意,最新版本的Java已弃用suspend(),resume()和stop()方法,因此您需要使用可用的替代方法。

class RunnableDemo implements Runnable {
   public Thread t;
   private String threadName;
   boolean suspended = false;

RunnableDemo( String name) { threadName = name; System.out.println("Creating " + threadName ); }

public void run() { System.out.println("Running " + threadName ); try { for(int i = 10; i > 0; i--) { System.out.println("Thread: " + threadName + ", " + i); //Let the thread sleep for a while. Thread.sleep(300); synchronized(this) { while(suspended) { wait(); } } } } catch (InterruptedException e) { System.out.println("Thread " + threadName + " interrupted."); } System.out.println("Thread " + threadName + " exiting."); }

public void start () { System.out.println("Starting " + threadName ); if (t == null) { t = new Thread (this, threadName); t.start (); } }

void suspend() { suspended = true; }

synchronized void resume() { suspended = false; notify(); } }

public class TestThread {

public static void main(String args[]) {

  </span><span class="typ">RunnableDemo</span><span class="pln"> R1 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">RunnableDemo</span><span class="pun">(</span><span class="pln"> </span><span class="str">"Thread-1"</span><span class="pun">);</span><span class="pln">
  R1</span><span class="pun">.</span><span class="pln">start</span><span class="pun">();</span><span class="pln">

  </span><span class="typ">RunnableDemo</span><span class="pln"> R2 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">RunnableDemo</span><span class="pun">(</span><span class="pln"> </span><span class="str">"Thread-2"</span><span class="pun">);</span><span class="pln">
  R2</span><span class="pun">.</span><span class="pln">start</span><span class="pun">();</span><span class="pln">

  </span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="typ">Thread</span><span class="pun">.</span><span class="pln">sleep</span><span class="pun">(</span><span class="lit">1000</span><span class="pun">);</span><span class="pln">
     R1</span><span class="pun">.</span><span class="pln">suspend</span><span class="pun">();</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Suspending First Thread"</span><span class="pun">);</span><span class="pln">
     </span><span class="typ">Thread</span><span class="pun">.</span><span class="pln">sleep</span><span class="pun">(</span><span class="lit">1000</span><span class="pun">);</span><span class="pln">
     R1</span><span class="pun">.</span><span class="pln">resume</span><span class="pun">();</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Resuming First Thread"</span><span class="pun">);</span><span class="pln">
     
     R2</span><span class="pun">.</span><span class="pln">suspend</span><span class="pun">();</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Suspending thread Two"</span><span class="pun">);</span><span class="pln">
     </span><span class="typ">Thread</span><span class="pun">.</span><span class="pln">sleep</span><span class="pun">(</span><span class="lit">1000</span><span class="pun">);</span><span class="pln">
     R2</span><span class="pun">.</span><span class="pln">resume</span><span class="pun">();</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Resuming thread Two"</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">InterruptedException</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Main thread Interrupted"</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Waiting for threads to finish."</span><span class="pun">);</span><span class="pln">
     R1</span><span class="pun">.</span><span class="pln">t</span><span class="pun">.</span><span class="kwd">join</span><span class="pun">();</span><span class="pln">
     R2</span><span class="pun">.</span><span class="pln">t</span><span class="pun">.</span><span class="kwd">join</span><span class="pun">();</span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">InterruptedException</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Main thread Interrupted"</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Main thread exiting."</span><span class="pun">);</span><span class="pln">

} }

上面的程序产生以下输出-

Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 10
Running Thread-2
Thread: Thread-2, 10
Thread: Thread-1, 9
Thread: Thread-2, 9
Thread: Thread-1, 8
Thread: Thread-2, 8
Thread: Thread-1, 7
Thread: Thread-2, 7
Suspending First Thread
Thread: Thread-2, 6
Thread: Thread-2, 5
Thread: Thread-2, 4
Resuming First Thread
Suspending thread Two
Thread: Thread-1, 6
Thread: Thread-1, 5
Thread: Thread-1, 4
Thread: Thread-1, 3
Resuming thread Two
Thread: Thread-2, 3
Waiting for threads to finish.
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.
Main thread exiting.

参考链接

www.learnfk.com/java/java-t…