啥也不说了,先上代码,最好能自己敲出来运行一遍(转帖者建议)
class NewThread extends Thread{
boolean suspendFlag;
NewThread(String threadname, ThreadGroup tgOb){
super(tgOb, threadname);
System.out.println(“New thread: ”+this);
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());
}
System.out.println(getName()+“exiting.”);
}
void mysuspend(){
suspendFlag = true;
}
synchronized void myresume(){
suspendFlag = false;
notify();
}
}
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ThreadGroup groupA = new ThreadGroup(“Group A”);
ThreadGroup groupB = new ThreadGroup(“Group B”);
NewThread ob1 = new NewThread(“one”, groupA);
NewThread ob2 = new NewThread(“Tow”, groupA);
NewThread ob3 = new NewThread(“three”, groupB);
NewThread ob4 = new NewThread(“Four”, groupB);
System.out.println(“Suspending Group A”);
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 {
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.”);
}
}