我有一个类Service
和一个内部类Timer
,它们在单独的线程中运行。该计时器接受一个滴答侦听器,该滴答侦听器在计时器运行时以固定的间隔被调用。]
要旨是:
public class Service { private Timer timer; Service() { // more to follow in code snippets below where I demonstrate the issue I am facing } private static class Timer implements Runnable { private interface TickListener { void onTick(Timer timer); } private TickListener tickListener; public void setTickListener(TickListener tickListener) { this.tickListener = tickListener; } public void start() { new Thread(this).start(); } @Override public void run() { while(keepThreadRunningCondition) { if(tickListener != null) { // to verify that Timer is actually running // and tickListener is not null // I actually log here // and the log appears just fine in all cases tickListener.onTick(this); } } } } }
现在,当我匿名注册滴答监听器时,就像这样:
class Service { private Timer timer; Service() { timer = new Timer(); timer.setTickListener(new Timer.TickListener() { @Override void onTick(Timer timer) { // this gets called perfectly fine } }); } }
...启动计时器后,侦听器调用就好了。
但是,当我将tick侦听器注册为我的Service
类的成员时,就像这样(我也尝试了public
,final
,volatile
等的几个不同排列) :
被调用。class Service { private Timer timer; private Timer.TickListener timerTickListener = new Timer.TickListener() { @Override void onTick(Timer timer) { // this will NOT get called } }; Service() { timer = new Timer(); timer.setTickListener(timerTickListener); } }
...当计时器启动时,监听器会not
我怀疑这个问题与多线程有关,因为类似的设置在not
跨越不同的线程时就可以正常工作,但是我对多线程并不了解,无法确切地了解为什么它不起作用。您能否阐明这个问题?
也许与在不同线程之间通过引用访问对象有关?还是有所不同?
我有一个Service类和一个内部类Timer,它们在单独的线程中运行。该计时器接受一个滴答侦听器,该滴答侦听器在计时器运行时以固定的间隔被调用。要点是...
您声称将TickListener注册为Service的成员变量后,不会调用onTicket。