【问题标题】:Associate same looper with different threads将相同的弯针与不同的线程相关联
【发布时间】:2014-11-05 00:45:49
【问题描述】:

在我的应用程序中,我想创建在单个队列上工作的多个线程。要创建队列,我知道我需要致电 Looper.prepare()

我希望我创建的所有其他线程都应该与我使用第一个线程创建的looper 相关联,我该如何实现?

【问题讨论】:

  • 做不到,你的目标是什么?
  • 在我的应用程序中,我想要一个队列,多个工作线程将在该队列上工作。一旦任务被发布到该队列中,一个线程将从队列中获取该任务并开始处理它。
  • 哪个线程? Looper 只与一个线程相关联,因此它无法将消息分派给其他线程
  • 据我所知,looper 会创建一个线程的消息队列,在该线程上创建它。我希望其他线程也从这个队列中获取消息。
  • 查看 Looper 中的 Looper 私有构造函数。 java,它描述了一个MessageQueue是如何创建的,以及这个Looper关联的Thread是什么

标签: android multithreading android-handler android-looper


【解决方案1】:

使用来自java.util.concurrent 包的Java 线程安全队列类之一代替Looper 来实现此目标。这是更常见的做法。

在线程之间共享队列并将任务作为队列条目从一个线程发布,然后您可以从另一个线程获取此条目。使用BlockingQueue,您可以轻松地做到这一点——在一个线程中只需调用take(),它就会阻塞线程,直到另一个线程put() 一些条目进入队列。就是这样。

Producer Consumer pattern example

BlockingQueueConcurrentLinkedQueue

About BlockingQueue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 2017-11-10
    • 1970-01-01
    相关资源
    最近更新 更多