【发布时间】:2016-07-21 08:03:02
【问题描述】:
在为线程安全项目编程时,如何确定哪个字段应该是线程安全的。例如,我们在多线程项目中有一个名为 TestThreadSafe 的项目。
public class TestThreadSafe {
public AtomicLong pCounter = new AtomicLong();
public AtomicLong mCounter = new AtomicLong();
protected final ConcurrentMap<K, V> Map = new ConcurrentHashMap<K, V>();
private ScheduledExecutorService ses;
private String dir;
}
这里,为什么不将 ses 和 dir 定义为 final 或 volatile 字段?
【问题讨论】:
-
我们不知道这些字段的用途。如果它们未在多线程上下文中使用,则不需要 volatile。如果您不更改引用,则不需要 final
-
TestThreadSafe 用于多线程上下文
标签: java multithreading thread-safety