如何等待线程和处理程序初始化

时间:2011-10-11 13:41:42

标签: java android multithreading android-2.2-froyo

我正在写一个应用程序。我遇到的情况是,我必须创建两个线程,首先创建thread1,然后创建第二个thread2。 thread1必须发布到thread2的处理程序。但是由于系统速度很快,在创建thread2并初始化处理程序之前,thread1开始将消息对象发布到thread2。因此,我面临着意想不到的行为。

请让我知道如何在thread1中等待thread2启动并初始化处理程序。我尝试了轮询机制,因为它影响了系统性能,这个修复程序没有被接受。

5 个答案:

答案 0 :(得分:1)

只需使用类似的东西:

// @ Thread 1
synchronized( someMonitor ) {
  someMonitor.wait( /* time? */ );
}

// @ Thread 2
synchronized( someMonitor ) {
  someMonitor.notify();
}

因此,线程1将一直等到线程2通知。如果条件已经设定,我会在等待前检查。

答案 1 :(得分:0)

另一种方法是从线程1创建线程2,以便在线程1到达发布内容之前创建线程2用于输入的队列或其他任何内容。

RGDS, 马丁

答案 2 :(得分:0)

答案 3 :(得分:0)

您需要重新考虑您的设计:看起来您正在使用Producer / Consumer模型,因此您可能希望使用(阻塞)队列进行消息交换。在两个线程上创建它,并在创建时将其传递给Producer和Consumer。在那种情况下,哪个线程首先开始运行并不重要:如果生产者然后队列开始被填充,如果是消费者,那么它将等到生产者也开始运行。

答案 4 :(得分:0)

您的第一个选择是使消息队列成为全局。

第二种是从thread1创建thread2。

第三是拥有一个同步对象(Object.wait,notify,interrupt)。

尽管如此,我认为和Mark一样,问题出在你的设计中,如果固有的设计不合适,你就无法解决这个问题。