Java Runnable访问类的对象

时间:2015-02-10 00:47:56

标签: java runnable

我有一个类,每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);
    }

1 个答案:

答案 0 :(得分:5)

使用MyClass.this.wordswords

可以使用this访问X对外部类X.this的引用。如果外部类是匿名类(在这种情况下不是),则这不起作用。

或者,您只能使用words而不是something.words - 与this一样,编译器会自动使用X.this