Java Runnable 正在访问 class 的对象

Java Runnable accessing a class's object

我有一个 class,它有一个每 10 秒 运行 的作业,如下面的代码块所示。然而,在 Runnable() 中,我无法访问 class 的对象。我假设它与 Java.

中的线程安全有关

如果我实现 Runnable,我将不得不提供一个 run() 函数。我真的不想这样做。我想要做的是让 class 有它自己的正常功能,但只需要在其中每 X 秒执行一次 运行s 的工作,并访问 class 的 LinkedList。我下面的 运行 包含在 scheduleAtFixedRate 中,而不是 class 本身。

有什么想法吗?

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);
    }

使用 MyClass.this.words,或仅 words

可以使用 X.this 访问对外部 class Xthis 引用。如果外部 class 是匿名的 class(在本例中不是),这将不起作用。

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