Mega Code Archive

 
Categories / Java Tutorial / Thread
 

Demonstrate thread groups

class NewThread  extends Thread {   boolean suspendFlag;   NewThread(String threadname, ThreadGroup tgOb) {     super(tgOb, threadname);     suspendFlag = false;     start();   }   public void run() {     try {       for (int i = 5; i > 0; i--) {         System.out.println(getName() + ": " + i);         Thread.sleep(1000);         synchronized (this) {           while (suspendFlag) {             wait();           }         }       }     } catch (Exception e) {       System.out.println("Exception in " + getName());     }   }   void mysuspend() {     suspendFlag = true;   }   synchronized void myresume() {     suspendFlag = false;     notify();   } } class ThreadGroupDemo {   public static void main(String args[]) {     ThreadGroup groupA = new ThreadGroup("Group A");     ThreadGroup groupB = new ThreadGroup("Group B");     NewThread ob1 = new NewThread("One", groupA);     NewThread ob2 = new NewThread("Two", groupA);     NewThread ob3 = new NewThread("Three", groupB);     NewThread ob4 = new NewThread("Four", groupB);     groupA.list();     groupB.list();     Thread tga[] = new Thread[groupA.activeCount()];     groupA.enumerate(tga);      for (int i = 0; i < tga.length; i++) {       ((NewThread) tga[i]).mysuspend();      }     try {       Thread.sleep(4000);     } catch (InterruptedException e) {       System.out.println("Main thread interrupted.");     }     System.out.println("Resuming Group A");     for (int i = 0; i < tga.length; i++) {       ((NewThread) tga[i]).myresume();      }     try {       ob1.join();       ob2.join();       ob3.join();       ob4.join();     } catch (Exception e) {       System.out.println("Exception in Main thread");     }   } }