我有一个带有LinkedBlockingQueue的Android应用程序,我用它在一个单独的线程上运行一系列网络作业(称之为网络线程)。当我从网络作业返回某个响应时,我需要从对话框中暂停用户输入的作业。我想阻止网络线程,直到用户输入完成,然后取消阻止它,以便它可以继续处理网络作业。什么并发机制在这里最有意义?
编辑: 由于暂停是基于网络作业的结果执行的,因此暂停事件来自网络线程
答案 0 :(得分:1)
编辑: 您的编辑使分辨率更容易一些。你仍然需要信号,但你可以抓住我放入的复杂的混乱。你可以使用一个简单的ReentrantLock和一个标志。
也许是这样的
boolean needsToWaitForUserInput = false;
final ReentrantLock lock = new ReentrantLock();
final Condition waitingCondition = lock.newCondition();
private final Runnable networkRunnable=new Runnable(){
public void run(){
//get network information
lock.lock();
needsToWaitForUserInput = true;
try{
while(needsToWaitForUserInput ){
waitingCondition.await();
}
}finally{
lock.unlock();
}
}
}
public void signalJobToContinue(){
lock.lock();
try{
needsToWaitForUserInput =false;
waitingCondition.signal();
}finally{
lock.unlock();
}
}