Mega Code Archive

 
Categories / Java by API / Java Lang
 

ThreadGroup

/*  * Output: New thread: Thread[One,5,Group A] New thread: Thread[Two,5,Group A] One: 5 New thread: Thread[Three,5,Group B] New thread: Thread[Four,5,Group B] Here is output from list(): java.lang.ThreadGroup[name=Group A,maxpri=10]     Thread[One,5,Group A]     Thread[Two,5,Group A] java.lang.ThreadGroup[name=Group B,maxpri=10]     Thread[Three,5,Group B]     Thread[Four,5,Group B] Suspending Group A Three: 5 Two: 5 Four: 5 Resuming Group A Four: 4 Three: 4 Waiting for threads to finish. Two: 4  */ class MyThread extends Thread {   boolean suspended;   MyThread(String threadname, ThreadGroup tgOb) {     super(tgOb, threadname);     System.out.println("New thread: " + this);     suspended = false;     start(); // Start the thread   }   public void run() {     try {       for (int i = 5; i > 0; i--) {         System.out.println(getName() + ": " + i);         Thread.sleep(1000);         synchronized (this) {           while (suspended) {             wait();           }         }       }     } catch (Exception e) {       System.out.println("Exception in " + getName());     }     System.out.println(getName() + " exiting.");   }   void suspendMe() {     suspended = true;   }   synchronized void resumeMe() {     suspended = false;     notify();   } } public class MainClass {   public static void main(String args[]) {     ThreadGroup groupA = new ThreadGroup("Group A");     ThreadGroup groupB = new ThreadGroup("Group B");     MyThread ob1 = new MyThread("One", groupA);     MyThread ob2 = new MyThread("Two", groupA);     MyThread ob3 = new MyThread("Three", groupB);     MyThread ob4 = new MyThread("Four", groupB);     System.out.println("\nHere is output from list():");     groupA.list();     groupB.list();     System.out.println("Suspending Group A");     Thread tga[] = new Thread[groupA.activeCount()];     groupA.enumerate(tga); // get threads in group     for (int i = 0; i < tga.length; i++) {       ((MyThread) tga[i]).suspendMe(); // suspend each thread     }     try {       Thread.sleep(1000);     } catch (InterruptedException e) {       System.out.println("Main thread interrupted.");     }     System.out.println("Resuming Group A");     for (int i = 0; i < tga.length; i++) {       ((MyThread) tga[i]).resumeMe();     }     try {       System.out.println("Waiting for threads to finish.");       ob1.join();       ob2.join();       ob3.join();       ob4.join();     } catch (Exception e) {       System.out.println("Exception in Main thread");     }     System.out.println("Main thread exiting.");   } }