静态变量是否只为所有正在运行的线程占用一个内存位置?

时间:2010-01-27 15:40:27

标签: java multithreading static variables

鉴于类的静态变量只占用一个内存位置,它是否由进程的所有线程共享?或者是为每个正在运行的线程创建的这种变量的一个内存位置?

此外,如果所有线程共享相同的内存位置,我们如何确保互斥?

3 个答案:

答案 0 :(得分:3)

进程中static的{​​{1}}变量将在该进程中包含的每个线程之间共享。

您可以通过创建一个带有class字段的简单class来验证这一点,然后启动几个public static并让它们递增变量,看看会发生什么。

如果要确保互斥,可以将变量设为私有,并且只允许通过使用Threads关键字定义的方法访问变量。

synchronized

答案 1 :(得分:2)

它在线程之间共享,您可以通过将变量本身设为私有并且仅使用同步访问器访问它来确保互斥。

答案 2 :(得分:1)

所有线程共享静态字段。 JVM中只有一个字段副本。

要控制对静态字段的访问,您可以使用 synchronized 关键字或使用JDK 5.0提供的concurrency utilities

有一种方法可以创建一个每个线程有一个实例的变量,请参阅ThreadLocal