在其他线程中更改变量的侦听器

拉斐尔H.

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

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

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

谢谢大家的帮助!

ChangeListener是最好,最简单的方法,但不是唯一的方法。您还可以使用wait / notifyall观察者模式。您可以使用一些易失性标志将线程变量与侦听器分开,在比较新收到的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();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Android中更改变量的侦听器

动作侦听器不会将设置变量更改为其他值

如何从JavaFX中的其他控件事件侦听器更改Slider值?

禁用JavaScript中的其他按键侦听器

在其他文件上使用Discord的“消息”侦听器

如何使用JSR223侦听器将RESPONSE CODE保存为变量并在其他采样器中用于断言

通过JButton上的事件侦听器更改变量值

Python Tkinter变量未在其他线程中更新

在其他控制器中更改后变量未更新

如何在Java中从其他类更改变量?

创建一个事件侦听器来侦听变量中的值是否已更改

单击特定的div时仅执行一次事件侦听器,但继续在其他div上执行

在侦听器中获取变量的值

如何在日志侦听器中添加一些其他列?

MVC,并将侦听器添加到其他Componenet中包含的JPanels

如何使C ++中的其他函数可访问侦听器?

删除其他事件侦听器功能中定义的弹出窗口

PlaySound在其他线程中

QMessageBox在其他线程中

scrollIntoView()防止其他侦听器触发

侦听器和线程

当我在其他函数中修改变量“num1”时,为什么它没有改变?

更改textField时,从其他视图控制器更改变量

作用域变量在事件侦听器更改后未在DOM中更新

指令中的输入文件更改侦听器不会更新范围变量[已附加plunker]

如何为变量创建更改侦听器?

android ServiceConnection侦听器在单独的线程中

在新线程中具有侦听器

从使用状态更改变量其他变量正在功能组件中重置