我应该声明字段volatile吗?

4 java concurrency reference volatile

考虑以下代码:

class Foo {
    java.util.Timer timer = new java.util.Timer();

    void doAction() {
        ...
        timer.schedule(new SomeTimerTask(), 0L);
        ...
    }

    void cancelAction() {
        timer.cancel();
    }
}
Run Code Online (Sandbox Code Playgroud)

从不同的线程调用方法.首先调用方法doAction().

我应该声明timer字段volatile对另一个线程可见吗?

Kum*_*tra 6

它更好地使用synchronized像方法关键字doAction()cacelAction()操纵实例变量的关键状态 timer ..

volatile关键字的行为与您描述的用于将volatile字段反映到每个线程的行为非常相似,但这仅适用于每个单独的操作,而不适用于所有操作.