2011-04-11 17 views
0

我有一個帶有LinkedBlockingQueue的Android應用程序,我用它在一個單獨的線程上運行一系列網絡作業(稱之爲網絡線程)。當我從網絡作業中取回特定響應時,我需要暫停作業以便從對話框中輸入用戶信息。我想阻止網絡線程,直到用戶輸入完成,然後解鎖它,以便它可以繼續處理網絡作業。什麼併發機制在這裏最有意義?我應該使用什麼同步方法來暫停使用者隊列線程?

編輯: 由於暫停是基於網絡作業的結果進行了暫停事件來自於網線,

回答

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

} 
+0

見編輯:網線本身是當需要暫停它,誰知道一個。 – 2011-04-11 20:44:26

+0

確定根據該編輯進行更新。讓我知道這個問題是否仍然被誤解 – 2011-04-11 20:53:46

相關問題