[英]Reentrant lock condition
我想创建类 Suspender 允许随时暂停和恢复线程,但不幸的是在调用condition.signalAll()
后什么也没发生。 谁能告诉我,这是什么原因?
public class Task extends Thread{
private Suspender suspender;
public boolean paused = false;
public Task(Suspender suspender){
this.suspender = suspender;
}
public void resumeThread(){
suspender.resume(this);
}
public void run(){
System.out.println("Pausing");
paused = true;
suspender.pause(this);
System.out.println("Resumed");
}
}
public class Suspender{
private ReentrantLock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
public void pause(Task current) {
try{
lock.lock();
while(current.paused){
condition.await();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally{
lock.unlock();
}
}
public void resume(Task current) {
try{
lock.lock();
current.paused = false;
condition.signalAll();
}finally{
lock.unlock();
}
}
}
public class Start{
public static void main(String args[]) throws Exception {
Suspender suspender = new Suspender();
Task t1 = new Task(suspender), t2 = new Task(suspender);
t1.start();
t2.start();
TimeUnit.SECONDS.sleep(2);
t1.resume();
TimeUnit.SECONDS.sleep(2);
t2.resumeThread();
t2.join();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.