【问题标题】:Change listener of variable in other thread在其他线程中更改变量的侦听器
【发布时间】:2015-02-16 03:12:51
【问题描述】:

我有一个 REST 客户端,它正在接收一个 JSON 对象。该客户端在自己的线程中工作,并且对象每秒更新大约 10 次。

主类(创建线程)现在应该能够对指定线程对象的更改做出反应。 ChangeListener 是最有用的方法吗?我的问题是将监听器与线程变量结合起来。我只知道如何提供线程安全的变量获取器,但这现在没有帮助。有没有人举例说明如何从另一个线程观察这样的值?

处理所有值并不是很重要。 (json 对象包含位置数据)主类之后应该使用数据来模拟鼠标移动,但这与问题无关。

谢谢大家的帮助!

【问题讨论】:

  • 你可以检查java观察者模式

标签: java multithreading propertychangelistener


【解决方案1】:

ChangeListener 是最好和最简单的方法,但不是唯一的方法。您还可以使用 wait/notifyall 观察者模式。您可以使用一些 volatile 标志将线程变量与侦听器分开,当您将新收到的 jason 字符串与当前 jason 字符串进行比较时,您可以更新这些标志。我附加了一个可能有帮助的虚拟代码:

import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicReference;

public class ChangeManager{
    private Set<ChangeListener> listenerSet = new HashSet<ChangeListener>();
    private volatile boolean stateChanged;
    private Timer timer = new Timer();
    private AtomicReference<MyJasonObject> currentJasonObjectState = new AtomicReference<MyJasonObject>();
    public void start(){
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                monitorValue();
            }

        }, 0, 1000);
    }
    public void monitorValue(){
        // Make Rest call and check if Jason object has changed and so update the stateChanged flag.
        stateChanged = hasStateChange();
        if(stateChanged){
            Iterator<ChangeListener> i = listenerSet.iterator();
            while(i.hasNext()) {
                i.next().notifyListener();
            }
            stateChanged = false;
        }
    }

    public void addListener(ChangeListener listener){
        listenerSet.add(listener);
    }

    public void removeListener(ChangeListener listener){
        listenerSet.remove(listener);
    }
}

interface ChangeListener {
    void notifyListener();
}

【讨论】:

    猜你喜欢
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 2013-03-04
    • 2010-10-10
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多