我有一个类,每10秒运行一次,如下面的代码块所示。但是在Runnable()中,我无法访问类的对象。我假设它与Java中的线程安全有关。
如果我实现了Runnable,那么我将必须提供run()
函数。我真的不想这样做。我想要做的是让类有自己的常规函数,但只需要在其中每隔X秒运行一次这个作业,并访问类的LinkedList。我在下面的运行包含在scheduleAtFixedRate
中,而不包含在类本身中。
有什么想法吗?
public class MyClass {
private volatile LinkedList<String> words;
public MyClass() {
this.words = new LinkedList<String>();
this.cleanup();
}
public void cleanup() {
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// can't access this.words here
}
}
}, 0, 10, TimeUnit.SECONDS);
}
答案 0 :(得分:5)
使用MyClass.this.words
或words
。
可以使用this
访问X
对外部类X.this
的引用。如果外部类是匿名类(在这种情况下不是),则这不起作用。
或者,您只能使用words
而不是something.words
- 与this
一样,编译器会自动使用X.this
。