[英]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.