public class TestThread {
ExecutorService executorService = Executors.newFixedThreadPool(10);
public static void main(String[] args) {
TestThread testThread = new TestThread();
final List<String> list = new ArrayList<>();
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.print(list);
}
}
testThread.executorService.submit(runnable);
}
}
在这个代码片段中,在主线程中创建了一个列表。在可运行的实例中,将在由ExecutorService管理的其他线程中访问此列表。如果可运行/可调用访问外部类变量,是否存在任何内存可见性问题?
所以我的问题是在这种情况下是否会出现线程内存可见性问题?据我所知,如果没有使用sychronization/volatile,线程将无法看到(或完全看到)另一个线程中的值。
说“有它的一个副本创建”可以采取意味着*列表*被复制(而不仅仅是对它的引用)。你会考虑澄清一点吗? –
是的,我对如何说出它感到痛苦。随意编辑。 http://stackoverflow.com/questions/4732544/why-are-only-final-variables-accessible-in-anonymous-class?rq=1 – Thilo
我想不出一个简洁的方式来做到这一点,所以我我添加了一个解释它的答案。为什么在1000年会说1字? –