我正在写一个应用程序。我遇到的情况是,我必须创建两个线程,首先创建thread1,然后创建第二个thread2。 thread1必须发布到thread2的处理程序。但是由于系统速度很快,在创建thread2并初始化处理程序之前,thread1开始将消息对象发布到thread2。因此,我面临着意想不到的行为。
请让我知道如何在thread1中等待thread2启动并初始化处理程序。我尝试了轮询机制,因为它影响了系统性能,这个修复程序没有被接受。
答案 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)
我建议在JDK中查看CountDownLatch类。
http://www.java2s.com/Code/Java/Threads/AnexampleofCountDownLatch.htm
http://download.oracle.com/javase/6/docs/api/java/util/concurrent/CountDownLatch.html
答案 3 :(得分:0)
您需要重新考虑您的设计:看起来您正在使用Producer / Consumer模型,因此您可能希望使用(阻塞)队列进行消息交换。在两个线程上创建它,并在创建时将其传递给Producer和Consumer。在那种情况下,哪个线程首先开始运行并不重要:如果生产者然后队列开始被填充,如果是消费者,那么它将等到生产者也开始运行。
答案 4 :(得分:0)
您的第一个选择是使消息队列成为全局。
第二种是从thread1创建thread2。
第三是拥有一个同步对象(Object.wait,notify,interrupt)。
尽管如此,我认为和Mark一样,问题出在你的设计中,如果固有的设计不合适,你就无法解决这个问题。