设计模式:多个swing接口监听线程变量

时间:2013-03-08 10:28:01

标签: java multithreading swing design-patterns synchronization

我对采用哪种设计模式以获得以下内容有一个很大的疑问:

我有一个A类,它不能是静态的,它有一个正在运行的线程来更新变量a1;

多个摆动类(B,C,D)必须使用变量A.a1的当前值更新JLabel b1,c1,d1。

因为A不能是静态B,C,D不能像b1.setText(A.getInstance()。getA1());

那样做

每次创建A的新实例都没有意义,因为A具有特定角色,每次都无法创建。

因为A有一个更新a1变量的线程,所以我也认为A,B,C,D之间存在同步问题,共享这个变量进行读写。

我想到了Observer模式,但它仍然需要每个B,C,D注册A并且它不能解决同步问题。

1 个答案:

答案 0 :(得分:1)

如果你想将A与B,C和D的存在分开,那么你需要创建一个Proxy对象作为中间人。此对象将知道如何到达A的实例,并在不可用时进行临时响应。

为了减少同步问题,我建议使用一个消息队列来保存a1值的连续变化。代理将轮询此队列并相应地更新swing类。实际上,代理可以为此目的实现Observer模式。在A上工作的线程必须将更新发布到消息队列。通过将其转换为一对一的生产者消费者设置,您可以通过使用适当的排队来最小化延迟,例如ConcurrentLinkedQueue

Proxy甚至不必为队列中的每个值在swing组件上运行更新,而只是在最新的(抛弃所有中间值)上。

更新:SwingWorker课程似乎是一个很好的候选人。