package cn.edu.henu.test;
/**
* 线程暂停,恢复
*
* @author Administrator
*
*/
public class ThreadTest implements Runnable {
private String name;
private Thread t;
private boolean suspendFlag = false;// 控制线程的执行
public ThreadTest(String name) {
this.name = name;
t = new Thread(this, name);
System.out.println("new Thread: " + t);
t.start();
}
public void run() {
try {
for (int i = 0; i < 6; i++) {
System.out.println(name + ": " + i);
Thread.sleep(500);
synchronized (this) {
while (suspendFlag)
wait();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + " exited");
}
/**
* 线程暂停
*/
public void setSuspendFlag() {
this.suspendFlag = true;
}
/**
* 唤醒线程
*/
public synchronized void setResume() {
this.suspendFlag = false;
notify();
}
/**
* 返回线程名
*
* @return name
*/
public String getName() {
return name;
}
public Thread getT() {
return t;
}
/**
* 测试 ThreadSuspend类
*/
public void testSuspend() {
ThreadTest one = new ThreadTest("one");
ThreadTest two = new ThreadTest("two");
try {
Thread.sleep(1000);
System.out.println("suspending thread " + one.getName());
one.setSuspendFlag();
Thread.sleep(1000);
System.out.println("resuming thread " + one.getName());
one.setResume();
System.out.println("suspending thread " + two.getName());
two.setSuspendFlag();
Thread.sleep(1000);
System.out.println("resuming thread " + two.getName());
two.setResume();
one.getT().join();
two.getT().join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main thread exit");
}
public static void main(String[] args) {
ThreadTest tt = new ThreadTest("123");
tt.testSuspend();
}
}