簡體   English   中英

我應該使用哪種同步方法來暫停使用者隊列線程?

[英]What synchronization method should I use for pausing a consumer queue thread?

我有一個帶有LinkedBlockingQueue的Android應用程序,用於在單獨的線程(稱為網絡線程)上運行一系列網絡作業。 當我從網絡作業中獲得某些響應時,我需要暫停作業以供對話框中的用戶輸入。 我想在用戶輸入完成之前阻止網絡線程,然后取消阻止它,以便它可以繼續處理網絡作業。 哪種並發機制在這里最有意義?

編輯:由於暫停是根據網絡作業的結果執行的,因此暫停事件來自網絡線程,

編輯:您的編輯使分辨率更容易。 您仍然需要發信號,但是您可以划掉我放入的復雜內容。您可以使用簡單的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(); 
      }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM