java thread | Suspending and Resuming a Thread

// Suspending and resuming a thread

class NewThread implements Runnable {
 String name; // name of thread
 Thread t;
 boolean suspendFlag;
 NewThread(String threadname) {
name = threadname;
t = new Thread(this, name);
System.out.println("New thread: " + t);
suspendFlag = false;
t.start(); // Start the thread
 }

 // This is the entry point for thread.
 public void run() {
try {
  for(int i = 15; i > 0; i--) {
    System.out.println(name + ": " + i);
    Thread.sleep(200);
    synchronized(this) {
      while(suspendFlag) {
        wait();
      }
    }
  }
} catch (InterruptedException e) {
  System.out.println(name + " interrupted.");
}
System.out.println(name + " exiting.");
 }

 void mysuspend() {
suspendFlag = true;
 }

 synchronized void myresume() {
suspendFlag = false;
notify();
 
}



class SuspendResume {

 public static void main(String args[]) {
NewThread ob1 = new NewThread("One");

NewThread ob2 = new NewThread("Two");

try {
  Thread.sleep(1000);
  ob1.mysuspend();
  System.out.println("Suspending thread One");
  Thread.sleep(1000);
  ob1.myresume();
  System.out.println("Resuming thread One");
  ob2.mysuspend();
  System.out.println("Suspending thread Two");
  Thread.sleep(1000);
  ob2.myresume();
  System.out.println("Resuming thread Two");
} catch (InterruptedException e) {
  System.out.println("Main thread Interrupted");
}

// wait for threads to finish
try {
  System.out.println("Waiting for threads to finish.");
  ob1.t.join();
  ob2.t.join();
} catch (InterruptedException e) {
  System.out.println("Main thread Interrupted");
}
System.out.println("Main thread exiting.");
 }

}

Reactions:

0 comments:

Post a Comment