Java by API/java.lang/ThreadGroup
Содержание
new ThreadGroup(String groupName)
<source lang="java">
/*
* 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."); }
}
</source>
ThreadGroup: activeCount()
<source lang="java">
/*
* 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."); }
}
</source>
ThreadGroup: activeGroupCount()
<source lang="java">
public class Main {
public static void main(String[] argv) throws Exception { ThreadGroup group = Thread.currentThread().getThreadGroup().getParent(); while (group.getParent() != null) { group = group.getParent(); } int numThreads = group.activeCount(); Thread[] threads = new Thread[numThreads * 2]; numThreads = group.enumerate(threads, false); for (int i = 0; i < numThreads; i++) { Thread thread = threads[i]; System.out.println(thread.getName()); } int numGroups = group.activeGroupCount(); ThreadGroup[] groups = new ThreadGroup[numGroups * 2]; numGroups = group.enumerate(groups, false); for (int i = 0; i < numGroups; i++) { System.out.println(groups[i]); } }
}
</source>
ThreadGroup: enumerate(Thread[] thread)
<source lang="java">
/*
* 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."); }
}
</source>
ThreadGroup: getName()
<source lang="java">
public class Main {
public static void main(String[] args) { ThreadGroup tg = new ThreadGroup("My ThreadGroup"); MyThread mt = new MyThread(tg, "My Thread"); mt.start(); }
} class MyThread extends Thread {
MyThread(ThreadGroup tg, String name) { super(tg, name); } public void run() { ThreadGroup tg = getThreadGroup(); System.out.println(tg.getName()); }
}
</source>
ThreadGroup: getParent()
<source lang="java">
public class Main {
public static void main(String[] argv) throws Exception { ThreadGroup group = Thread.currentThread().getThreadGroup().getParent(); while (group.getParent() != null) { group = group.getParent(); } int numThreads = group.activeCount(); Thread[] threads = new Thread[numThreads * 2]; numThreads = group.enumerate(threads, false); for (int i = 0; i < numThreads; i++) { Thread thread = threads[i]; System.out.println(thread.getName()); } int numGroups = group.activeGroupCount(); ThreadGroup[] groups = new ThreadGroup[numGroups * 2]; numGroups = group.enumerate(groups, false); for (int i = 0; i < numGroups; i++) { System.out.println(groups[i]); } }
}
</source>
ThreadGroup: list()
<source lang="java">
/*
* 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."); }
}
</source>