public class MySprite implements Runnable {
/*
* 线程用变量
*/
private boolean running = false;
private boolean waiting = false;
private Thread thread;
/*
* Business 变量
*/
private String name;
public MySprite(String name) {
this.name = name;
this.thread = new Thread(this);
}
/**
* 启动线程
*/
public void start() {
running = true;
thread.start();
}
/**
* 挂起线程
*/
public void suspend() {
if (waiting) { // 是挂起状态则直接返回
return;
}
synchronized (this) {
this.waiting = true;
}
}
/**
* 恢复线程
*/
public void resume() {
if (!waiting) { // 没有挂起则直接返回
return;
}
synchronized (this) {
this.waiting = false;
this.notifyAll();
}
}
/**
* 停止线程
*/
public void stop() {
if (!running) { // 没有运行则直接返回
return;
}
synchronized (this) {
running = false;
}
}
public void run() {
for(;;) {
try {
// 线程挂起和退出处理
synchronized (this) {
if (!running) {
break;
}
if (waiting) {
this.wait();
}
}
// 应该做的事情
cry();
// 进入等待状态
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void cry() {
System.out.println(name + ":woo!");
}
}
之前也是实现了Runnable接口,得到线程 Thread worker = new Thread(this);
调用worker.wait();
提示报错:java.lang.IllegalMonitorStateException
产生错误原因可以查看:http://blog.csdn.net/intlgj/article/details/6245226
代码转摘自:http://www.cnblogs.com/hcfalan/archive/2008/06/16/1222960.html