让线程等待一个条件

时间:2011-06-29 20:10:37

标签: java multithreading

在GUI中,我有几个按钮。这些按钮分离了通过网络向服务器发送请求的工作线程。在单独的线程中,有一个侦听器接收来自服务器的响应。此响应通过Observer / Observable接口传递给工作线程正在执行方法的同一对象。

我需要做的是让工作线程等待来自与它们相关的服务器的响应。本质上,工作线程应该发送命令,然后等待一些指示接收到正确响应的条件。我可以想到多种方法(睡眠,轮询,等待,通知,监视器等),但有一种特殊的方法在这种情况下最好吗?

2 个答案:

答案 0 :(得分:6)

我建议使用java.util.concurrent包中的高级“锁定”机制 例如CountDownLatch - “允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。”

答案 1 :(得分:2)

这似乎不是你想要阻止的地方。您已经处于工作线程中,因此您没有为您的GUI或其他任何状态保持任何状态,我会发送消息并保释 - 当您的响应返回时,从池中抓取另一个线程并发送它这是快乐的方式。

如果您拥有两者之间共享的数据,请将其放入由某个常用值键入的集合中的自己的对象中,并让新线程在它进入时将其拉出。

为了便于阅读/简化,使具有数据的对象也包含知道如何处理该数据的代码,以便在获得传入消息时所要做的就是检索唯一标识哪个对象发送它的密钥,检索该对象通过键并调用该对象的“数据接收”方法传递您从数据包中获取的信息。

关于这一点的好处是,通过使“数据接收”方法成为许多不同处理程序可以实现的接口,使得简单的侦听器处理大量传入数据包变得微不足道。

OO很酷,是吗?

相关问题