您的位置:首页 > 编程语言 > Java开发

java线程暂停和回复类

2014-05-29 18:07 267 查看
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: