2012-12-29 50 views
1

我有兩個工作線程:線程使用的交互處理程序

  • DB螺紋
  • 網絡螺紋

他們會單身,以便應用的每個部分都能用。

public class DbThread extends Thread { 

     public Handler handler; 

     @Override 
     public void run() { 
      Looper.prepare(); 

      handler = new Handler(); 

      Looper.loop(); 
     } 
    } 

他們通過處理程序進行通信。我關心的是同步。另一個線程可以在創建時嘗試訪問處理程序以發送消息。我如何正確同步Handler訪問?

我的想法是,想要訪問另一個線程的Handler的線程應在Handler創建之前等待。但我不知道如何做到這一點。

回答

2

我在實施this解決方案時取得了一些成功。

您將隱藏在HandlerThread中的活套,您可以等待,直到線程準備好接收消息。

它的工作原理是getLooper呼叫在waitUntilReady內將會阻塞,直到活套被初始化。這樣做不僅可以確保處理程序已創建,還可以確保您的線程已準備好接收消息。

+0

你的解決方案肯定更好,並介紹一個訂單,我刪除我的。謝謝。 :) – Snicolas

+0

謝謝@Snicolas! – fedepaol

+0

另外,我認爲解決方案需要得到更多的保護。我會評論你提到的線索。 – Snicolas