<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FThreads%2FThread_Status</id>
		<title>Java/Threads/Thread Status - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FThreads%2FThread_Status"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Threads/Thread_Status&amp;action=history"/>
		<updated>2026-04-23T09:14:19Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Threads/Thread_Status&amp;diff=8297&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Threads/Thread_Status&amp;diff=8297&amp;oldid=prev"/>
				<updated>2010-06-01T06:58:34Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:58, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Threads/Thread_Status&amp;diff=8296&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Threads/Thread_Status&amp;diff=8296&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:46Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Add a delay ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
      System.out.println(&amp;quot;i = &amp;quot; + i);&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep(1000);&lt;br /&gt;
      } catch (InterruptedException ie) {&lt;br /&gt;
        ie.printStackTrace();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Another way to stop a thread ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class AlternateStop extends Object implements Runnable {&lt;br /&gt;
  private volatile boolean stopRequested;&lt;br /&gt;
  private Thread runThread;&lt;br /&gt;
  public void run() {&lt;br /&gt;
    runThread = Thread.currentThread();&lt;br /&gt;
    stopRequested = false;&lt;br /&gt;
    int count = 0;&lt;br /&gt;
    while (!stopRequested) {&lt;br /&gt;
      System.out.println(&amp;quot;Running ... count=&amp;quot; + count);&lt;br /&gt;
      count++;&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep(300);&lt;br /&gt;
      } catch (InterruptedException x) {&lt;br /&gt;
         // re-assert interrupt&lt;br /&gt;
        Thread.currentThread().interrupt();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void stopRequest() {&lt;br /&gt;
    stopRequested = true;&lt;br /&gt;
    if (runThread != null) {&lt;br /&gt;
      runThread.interrupt();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    AlternateStop as = new AlternateStop();&lt;br /&gt;
    Thread t = new Thread(as);&lt;br /&gt;
    t.start();&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(2000);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
    as.stopRequest();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Another way to suspend and resume ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class AlternateSuspendResume extends Object implements Runnable {&lt;br /&gt;
  private volatile int firstVal;&lt;br /&gt;
  private volatile int secondVal;&lt;br /&gt;
  private volatile boolean suspended;&lt;br /&gt;
  public boolean areValuesEqual() {&lt;br /&gt;
    return (firstVal == secondVal);&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    try {&lt;br /&gt;
      suspended = false;&lt;br /&gt;
      firstVal = 0;&lt;br /&gt;
      secondVal = 0;&lt;br /&gt;
      workMethod();&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
      System.out.println(&amp;quot;interrupted in workMethod()&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private void workMethod() throws InterruptedException {&lt;br /&gt;
    int val = 1;&lt;br /&gt;
    while (true) {&lt;br /&gt;
      // blocks if suspended is true&lt;br /&gt;
      waitWhileSuspended();&lt;br /&gt;
      stepOne(val);&lt;br /&gt;
      stepTwo(val);&lt;br /&gt;
      val++;&lt;br /&gt;
      // blocks if suspended is true&lt;br /&gt;
      waitWhileSuspended();&lt;br /&gt;
      Thread.sleep(200); // pause before looping again&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private void stepOne(int newVal) throws InterruptedException {&lt;br /&gt;
    firstVal = newVal;&lt;br /&gt;
    // simulate some other lengthy process&lt;br /&gt;
    Thread.sleep(300);&lt;br /&gt;
  }&lt;br /&gt;
  private void stepTwo(int newVal) {&lt;br /&gt;
    secondVal = newVal;&lt;br /&gt;
  }&lt;br /&gt;
  public void suspendRequest() {&lt;br /&gt;
    suspended = true;&lt;br /&gt;
  }&lt;br /&gt;
  public void resumeRequest() {&lt;br /&gt;
    suspended = false;&lt;br /&gt;
  }&lt;br /&gt;
  private void waitWhileSuspended() throws InterruptedException {&lt;br /&gt;
    while (suspended) {&lt;br /&gt;
      Thread.sleep(200);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    AlternateSuspendResume asr = new AlternateSuspendResume();&lt;br /&gt;
    Thread t = new Thread(asr);&lt;br /&gt;
    t.start();&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(1000);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
      asr.suspendRequest();&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep(350);&lt;br /&gt;
      } catch (InterruptedException x) {&lt;br /&gt;
      }&lt;br /&gt;
      System.out.println(&amp;quot;dsr.areValuesEqual()=&amp;quot; + asr.areValuesEqual());&lt;br /&gt;
      asr.resumeRequest();&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep((long) (Math.random() * 2000.0));&lt;br /&gt;
      } catch (InterruptedException x) {&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    System.exit(0);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Daemon Thread ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class DaemonThread implements Runnable {&lt;br /&gt;
  public void run() {&lt;br /&gt;
    System.out.println(&amp;quot;entering run()&amp;quot;);&lt;br /&gt;
    try {&lt;br /&gt;
      System.out.println(&amp;quot;in run(): currentThread() is&amp;quot;&lt;br /&gt;
          + Thread.currentThread());&lt;br /&gt;
      while (true) {&lt;br /&gt;
        try {&lt;br /&gt;
          Thread.sleep(500);&lt;br /&gt;
        } catch (InterruptedException x) {&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println(&amp;quot;in run(): woke up again&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    } finally {&lt;br /&gt;
      System.out.println(&amp;quot;leaving run()&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    System.out.println(&amp;quot;entering main()&amp;quot;);&lt;br /&gt;
    Thread t = new Thread(new DaemonThread());&lt;br /&gt;
    t.setDaemon(true);&lt;br /&gt;
    t.start();&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(3000);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;leaving main()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Determining When a Thread Has Finished ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    Thread thread = new MyThread();&lt;br /&gt;
    thread.start();&lt;br /&gt;
    if (thread.isAlive()) {&lt;br /&gt;
      System.out.println(&amp;quot;Thread has not finished&amp;quot;);&lt;br /&gt;
    } else {&lt;br /&gt;
      System.out.println(&amp;quot;Finished&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    long delayMillis = 5000; // 5 seconds&lt;br /&gt;
    thread.join(delayMillis);&lt;br /&gt;
    if (thread.isAlive()) {&lt;br /&gt;
      System.out.println(&amp;quot;thread has not finished&amp;quot;);&lt;br /&gt;
    } else {&lt;br /&gt;
      System.out.println(&amp;quot;Finished&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    thread.join();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyThread extends Thread {&lt;br /&gt;
  boolean stop = false;&lt;br /&gt;
  public void run() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
      if (stop) {&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interrupt a thread. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
class MyThread implements Runnable {&lt;br /&gt;
  public void run() {&lt;br /&gt;
    System.out.println(Thread.currentThread().getName() + &amp;quot; starting.&amp;quot;);&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(30000);&lt;br /&gt;
      for (int i = 1; i &amp;lt; 10; i++) {&lt;br /&gt;
        if (Thread.interrupted()) {&lt;br /&gt;
          System.out.println(&amp;quot;interrupted.&amp;quot;);&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
        System.out.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
        for (long x = 0; x &amp;lt; 1000; x++)&lt;br /&gt;
          System.out.println(&amp;quot;/&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    } catch (Exception exc) {&lt;br /&gt;
      System.out.println(Thread.currentThread().getName() + &amp;quot; interrupted.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(Thread.currentThread().getName() + &amp;quot; exiting.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    Thread thrd = new Thread(new MyThread(), &amp;quot;MyThread #1&amp;quot;);&lt;br /&gt;
    Thread thrd2 = new Thread(new MyThread(), &amp;quot;MyThread #2&amp;quot;);&lt;br /&gt;
    thrd.start();&lt;br /&gt;
    Thread.sleep(1000);&lt;br /&gt;
    thrd.interrupt();&lt;br /&gt;
    thrd2.start();&lt;br /&gt;
    Thread.sleep(4000);&lt;br /&gt;
    thrd2.interrupt();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Is thread alive ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class TwoThreadAlive extends Thread {&lt;br /&gt;
  public void run() {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
      printMsg();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void printMsg() {&lt;br /&gt;
    Thread t = Thread.currentThread();&lt;br /&gt;
    String name = t.getName();&lt;br /&gt;
    System.out.println(&amp;quot;name=&amp;quot; + name);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    TwoThreadAlive tt = new TwoThreadAlive();&lt;br /&gt;
    tt.setName(&amp;quot;Thread&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;before start(), tt.isAlive()=&amp;quot; + tt.isAlive());&lt;br /&gt;
    tt.start();&lt;br /&gt;
    System.out.println(&amp;quot;just after start(), tt.isAlive()=&amp;quot; + tt.isAlive());&lt;br /&gt;
    for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
      tt.printMsg();&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;The end of main(), tt.isAlive()=&amp;quot; + tt.isAlive());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Monitor a thread&amp;quot;s status. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
class MyThread extends Thread{&lt;br /&gt;
  boolean waiting= true;&lt;br /&gt;
  boolean ready= false;&lt;br /&gt;
  MyThread() {&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    String thrdName = Thread.currentThread().getName();&lt;br /&gt;
    System.out.println(thrdName + &amp;quot; starting.&amp;quot;);&lt;br /&gt;
    while(waiting) &lt;br /&gt;
      System.out.println(&amp;quot;waiting:&amp;quot;+waiting); &lt;br /&gt;
    System.out.println(&amp;quot;waiting...&amp;quot;);&lt;br /&gt;
    startWait(); &lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(1000);&lt;br /&gt;
    } catch(Exception exc) {&lt;br /&gt;
      System.out.println(thrdName + &amp;quot; interrupted.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(thrdName + &amp;quot; terminating.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  synchronized void startWait() {&lt;br /&gt;
    try {&lt;br /&gt;
      while(!ready) wait();&lt;br /&gt;
    } catch(InterruptedException exc) {&lt;br /&gt;
      System.out.println(&amp;quot;wait() interrupted&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  synchronized void notice() {&lt;br /&gt;
    ready = true;&lt;br /&gt;
    notify();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String args[]) throws Exception{&lt;br /&gt;
      MyThread thrd = new MyThread();&lt;br /&gt;
      thrd.setName(&amp;quot;MyThread #1&amp;quot;);&lt;br /&gt;
      showThreadStatus(thrd);&lt;br /&gt;
      thrd.start();&lt;br /&gt;
      Thread.sleep(50);&lt;br /&gt;
      showThreadStatus(thrd);&lt;br /&gt;
      thrd.waiting = false;&lt;br /&gt;
      Thread.sleep(50); &lt;br /&gt;
      showThreadStatus(thrd);&lt;br /&gt;
      thrd.notice();&lt;br /&gt;
      Thread.sleep(50);&lt;br /&gt;
      showThreadStatus(thrd);&lt;br /&gt;
      while(thrd.isAlive()) &lt;br /&gt;
        System.out.println(&amp;quot;alive&amp;quot;);&lt;br /&gt;
      showThreadStatus(thrd);&lt;br /&gt;
  }&lt;br /&gt;
  static void showThreadStatus(Thread thrd) {&lt;br /&gt;
    System.out.println(thrd.getName()+&amp;quot; Alive:&amp;quot;+thrd.isAlive()+&amp;quot; State:&amp;quot; + thrd.getState() );&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pause the execution ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
class Wait {&lt;br /&gt;
  public static void oneSec() {&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.currentThread().sleep(1000);&lt;br /&gt;
    } catch (InterruptedException e) {&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void manySec(long s) {&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.currentThread().sleep(s * 1000);&lt;br /&gt;
    } catch (InterruptedException e) {&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Main{&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Wait.oneSec();&lt;br /&gt;
    Wait.manySec(5);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pause the execution of a thread using sleep() ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
class Wait {&lt;br /&gt;
  public static void oneSec() {&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.currentThread().sleep(1000);&lt;br /&gt;
    } catch (InterruptedException e) {&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void manySec(long s) {&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.currentThread().sleep(s * 1000);&lt;br /&gt;
    } catch (InterruptedException e) {&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    System.out.println(&amp;quot;Wait one second&amp;quot;);&lt;br /&gt;
    Wait.oneSec();&lt;br /&gt;
    System.out.println(&amp;quot;Done\nWait five seconds&amp;quot;);&lt;br /&gt;
    Wait.manySec(5);&lt;br /&gt;
    System.out.println(&amp;quot;Done&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pausing a Thread: set a variable that the thread checks occasionally, call Object.wait() ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    MyThread thread = new MyThread();&lt;br /&gt;
    thread.start();&lt;br /&gt;
    while (true) {&lt;br /&gt;
      synchronized (thread) {&lt;br /&gt;
        thread.pause = true;&lt;br /&gt;
      }&lt;br /&gt;
      synchronized (thread) {&lt;br /&gt;
        thread.pause = false;&lt;br /&gt;
        thread.notify();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyThread extends Thread {&lt;br /&gt;
  boolean pause = false;&lt;br /&gt;
  public void run() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
      synchronized (this) {&lt;br /&gt;
        while (pause) {&lt;br /&gt;
          try {&lt;br /&gt;
            wait();&lt;br /&gt;
          } catch (Exception e) {&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pausing the Current Thread: a thread can temporarily stop execution. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    long numMillisecondsToSleep = 5000; // 5 seconds&lt;br /&gt;
    Thread.sleep(numMillisecondsToSleep);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== set Uncaught Exception Handler ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class Uncaught implements Runnable {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Thread thread = new Thread(new Uncaught());&lt;br /&gt;
    thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {&lt;br /&gt;
      public void uncaughtException(Thread t, Throwable e) {&lt;br /&gt;
        e.printStackTrace();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    thread.start();&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    throw new ArithmeticException();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stopping a Thread: set a variable that the thread checks occasionally ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    MyThread thread = new MyThread();&lt;br /&gt;
    thread.start();&lt;br /&gt;
    thread.stop = true;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyThread extends Thread {&lt;br /&gt;
  boolean stop = false;&lt;br /&gt;
  public void run() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
      if (stop) {&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Thread sleep ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class TwoThreadSleep extends Thread {&lt;br /&gt;
  public void run() {&lt;br /&gt;
    Thread t = Thread.currentThread();&lt;br /&gt;
    String name = t.getName();&lt;br /&gt;
    System.out.println(&amp;quot;entered loop() - &amp;quot; + name);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep(200);&lt;br /&gt;
      } catch (InterruptedException x) {&lt;br /&gt;
        }&lt;br /&gt;
      System.out.println(&amp;quot;name=&amp;quot; + name);&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;leave loop() - &amp;quot; + name);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    TwoThreadSleep tt = new TwoThreadSleep();&lt;br /&gt;
    tt.setName(&amp;quot;thread&amp;quot;);&lt;br /&gt;
    tt.start();&lt;br /&gt;
    // pause for a bit&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(700);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
      // ignore&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Thread sleep and interrupt ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class SleepInterrupt extends Object implements Runnable {&lt;br /&gt;
  public void run() {&lt;br /&gt;
    try {&lt;br /&gt;
      System.out.println(&amp;quot;in run() - sleep for 20 seconds&amp;quot;);&lt;br /&gt;
      Thread.sleep(20000);&lt;br /&gt;
      System.out.println(&amp;quot;in run() - woke up&amp;quot;);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
      System.out.println(&amp;quot;in run() - interrupted while sleeping&amp;quot;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;in run() - leaving normally&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    SleepInterrupt si = new SleepInterrupt();&lt;br /&gt;
    Thread t = new Thread(si);&lt;br /&gt;
    t.start();&lt;br /&gt;
    // Be sure that the new thread gets a chance to&lt;br /&gt;
    // run for a while.&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(2000);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;in main() - interrupting other thread&amp;quot;);&lt;br /&gt;
    t.interrupt();&lt;br /&gt;
    System.out.println(&amp;quot;in main() - leaving&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Visual suspend and resume ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import java.awt.FlowLayout;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.GridLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
public class SwingSuspendResume extends JPanel implements Runnable {&lt;br /&gt;
  private static final String[] symbolList = { &amp;quot;|&amp;quot;, &amp;quot;/&amp;quot;, &amp;quot;-&amp;quot;, &amp;quot;\\&amp;quot;, &amp;quot;|&amp;quot;, &amp;quot;/&amp;quot;,&lt;br /&gt;
      &amp;quot;-&amp;quot;, &amp;quot;\\&amp;quot; };&lt;br /&gt;
  private Thread runThread;&lt;br /&gt;
  private JTextField symbolTF;&lt;br /&gt;
  public SwingSuspendResume() {&lt;br /&gt;
    symbolTF = new JTextField();&lt;br /&gt;
    symbolTF.setEditable(false);&lt;br /&gt;
    symbolTF.setFont(new Font(&amp;quot;Monospaced&amp;quot;, Font.BOLD, 26));&lt;br /&gt;
    symbolTF.setHorizontalAlignment(JTextField.CENTER);&lt;br /&gt;
    final JButton suspendB = new JButton(&amp;quot;Suspend&amp;quot;);&lt;br /&gt;
    final JButton resumeB = new JButton(&amp;quot;Resume&amp;quot;);&lt;br /&gt;
    suspendB.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        suspendNow();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    resumeB.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        resumeNow();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    JPanel innerStackP = new JPanel();&lt;br /&gt;
    innerStackP.setLayout(new GridLayout(0, 1, 3, 3));&lt;br /&gt;
    innerStackP.add(symbolTF);&lt;br /&gt;
    innerStackP.add(suspendB);&lt;br /&gt;
    innerStackP.add(resumeB);&lt;br /&gt;
    this.setLayout(new FlowLayout(FlowLayout.CENTER));&lt;br /&gt;
    this.add(innerStackP);&lt;br /&gt;
  }&lt;br /&gt;
  private void suspendNow() {&lt;br /&gt;
    if (runThread != null) { // avoid NullPointerException&lt;br /&gt;
      runThread.suspend();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private void resumeNow() {&lt;br /&gt;
    if (runThread != null) { // avoid NullPointerException&lt;br /&gt;
      runThread.resume();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    try {&lt;br /&gt;
      // Store this for the suspendNow() and&lt;br /&gt;
      // resumeNow() methods to use.&lt;br /&gt;
      runThread = Thread.currentThread();&lt;br /&gt;
      int count = 0;&lt;br /&gt;
      while (true) {&lt;br /&gt;
        // each time through, show the next symbol&lt;br /&gt;
        symbolTF.setText(symbolList[count % symbolList.length]);&lt;br /&gt;
        Thread.sleep(200);&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
      // ignore&lt;br /&gt;
    } finally {&lt;br /&gt;
      // make sure that the reference to it is also lost.&lt;br /&gt;
      runThread = null;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    SwingSuspendResume vsr = new SwingSuspendResume();&lt;br /&gt;
    Thread t = new Thread(vsr);&lt;br /&gt;
    t.start();&lt;br /&gt;
    JFrame f = new JFrame();&lt;br /&gt;
    f.setContentPane(vsr);&lt;br /&gt;
    f.setSize(320, 200);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
    f.addWindowListener(new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>