Thread suspend, resume, and stop

In this chapter you will learn:

  1. How to suspend, resume, and stop a thread

Suspend, resume, and stop a thread

Since the suspend, resume, and stop methods from Thread are all deprecated we need to use boolean value to control a thread.

The following methods define boolean variables for suspended and stopped. And we control the thread with those variables. For example, if the stop boolean is true we stop the execution of a thread by just exiting the run method.

If we want to suspend a thread we can call wait() method also based on the boolean suspend variable.

class MyThread implements Runnable {
  Thread thrd;/*from   j a v  a2s  .c  o m*/
  boolean suspended;
  boolean stopped;

  MyThread(String name) {
    thrd = new Thread(this, name);
    suspended = false;
    stopped = false;
    thrd.start();
  }

  public void run() {
    try {
      for (int i = 1; i < 10; i++) {
        System.out.print(".");
        Thread.sleep(50);
        synchronized (this) {
          while (suspended)
            wait();
          if (stopped)
            break;
        }
      }
    } catch (InterruptedException exc) {
      System.out.println(thrd.getName() + " interrupted.");
    }
    System.out.println("\n" + thrd.getName() + " exiting.");
  }

  synchronized void stop() {
    stopped = true;
    suspended = false;
    notify();
  }

  synchronized void suspend() {
    suspended = true;
  }

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

public class Main {
  public static void main(String args[]) throws Exception {
    MyThread mt = new MyThread("MyThread");
    Thread.sleep(100);
    mt.suspend();
    Thread.sleep(100);

    mt.resume();
    Thread.sleep(100);

    mt.suspend();
    Thread.sleep(100);

    mt.resume();
    Thread.sleep(100);

    mt.stop();
  }
}

The code above generates the following result.

Next chapter...

What you will learn in the next chapter:

  1. Listing all threads and threadgroups in the VM
Home » Java Tutorial » Thread
Thread introduction
Thread Name
Thread Main
Thread sleep
Thread Creation
Thread join and is alive
Thread priorities
Thread Synchronization
Interthread Communication
Thread Step
Thread suspend, resume, and stop
ThreadGroup
BlockingQueue
Semaphore
ReentrantLock
Executor
ScheduledThreadPoolExecutor