2013-04-06 92 views
0

我正在尝试编写一个程序,以便在程序运行过程中不断检查变量的变化。这是否需要线程中的无限循环?检测变量变化

+0

这真的取决于你为什么需要追踪变量。如果它只是一个最重要的修改操作,那么提供一个setter方法(如The1提出的方法)可能很好。如果问题涉及多个线程(即使是一个简单的检查器线程),那么您立即就会有一整套新的问题需要考虑。 – andi5 2013-04-06 15:20:45

回答

0

使用包装类你喜欢的变量:

class VarWrapper{ 
    private Object myVar; 

    public Object getMyVar() { 
     return myVar; 
    } 
    public void setMyVar(Object myVar) { 
     //[1],Here you'll know myVar changed 
     this.myVar = myVar; 
    } 
} 
1

还有比定期轮询变量的值更好的选择。轮询可能会错过变化的变化,即使没有发生任何事情,它也需要计算资源。

你可以将这个变量包装在一个包装类中,并且只能通过一个setter来改变它。

如果您使用的是Eclipse,您可以要求调试器在值更改时停止。

0
Class Test{ 
    private int var; 

    public void setVariable(int var){ 
    this.var = var; 
    varChangedCallBack(); 
    } 

    public void varChangedCallBack(){ 
     //Do something on var changed 
    } 
} 

由于变量是私有以上,它是可以改变的只有THR” setter.After改变我们给调用回调方法,在其中你可以做任何你喜欢的变量变化做。

0

如果你有一个专用的线程来检查变量状态,那么它应该通过在对象上使用sync-notify唤醒这个等待线程来完成。等待的线程将同步等待该对象。

如果你没有专门的线程,那么这个观察者模式。 http://en.wikipedia.org/wiki/Observer_pattern