1

我有两个工作线程:

  • 数据库线程
  • 网络线程

它们将是单例,以便应用程序的每个部分都可以使用它们。

public class DbThread extends Thread {

      public Handler handler;

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

          handler = new Handler();

          Looper.loop();
      }
  }

它们通过处理程序进行通信。我关心的是同步。另一个线程可以在创建处理程序时尝试访问它以发送消息。如何正确同步处理程序访问?

我的想法是想要访问另一个线程的处理程序的线程应该在处理程序创建之前等待。但我不知道如何做到这一点。

4

1 回答 1

2

我在实施此解决方案方面取得了一些成功。

您将在 HandlerThread 中隐藏 looper,您可以等到线程准备好接收消息。

它之所以有效,是因为内部的getLooper调用waitUntilReady将阻塞,直到 Looper 被初始化。这样做不仅可以确保处理程序已创建,而且您的线程已准备好接收消息。

于 2012-12-29T20:56:05.540 回答