我有一個類,它有一個每10秒運行一次的作業,如下面的代碼塊所示。然而,在Runnable()中,我無法訪問該類的對象。我假設它與Java中的線程安全有關。Java Runnable訪問一個類的對象
如果我實現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);
}
請注意,'volatile'在這裏很可能是錯誤的。如果你想訪問'words'的元素,那麼你需要使用鎖定/同步或線程安全的數據結構。如果您想從Runnable中分配/替換整個單詞變量,則只能使用'volatile'。 – jmiserez 2018-02-27 12:13:56