我应该使用什么同步方法来暂停使用者队列线程?

时间:2011-04-11 20:00:03

标签: java android multithreading synchronization

我有一个带有LinkedBlockingQueue的Android应用程序,我用它在一个单独的线程上运行一系列网络作业(称之为网络线程)。当我从网络作业返回某个响应时,我需要从对话框中暂停用户输入的作业。我想阻止网络线程,直到用户输入完成,然后取消阻止它,以便它可以继续处理网络作业。什么并发机制在这里最有意义?

编辑: 由于暂停是基于网络作业的结果执行的,因此暂停事件来自网络线程

1 个答案:

答案 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(); 
      }

}