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