多个线程之间的共享数据和唯一数据

时间:2013-12-25 20:51:30

标签: java multithreading

在Java中,哪些代码在多个线程之间共享,哪些代码被复制以用于一个特定的线程?

如果考虑下面的片段

,那就更准确了
public void foo () {

    int a = 0;

    a++;
}

由多个线程同时执行,每个线程是否拥有自己的变量a的副本,还是在线程之间共享?

2 个答案:

答案 0 :(得分:8)

不,a是一个局部变量。这意味着foo的每次调用都会获得自己独立的变量 - 无论是多线程还是在同一线程中递归。

请注意,这不是关于共享代码 - 它是关于共享数据。所有线程中都会运行相同的代码(很可能),但每次调用都将使用一组单独的局部变量。

答案 1 :(得分:3)

非常好的问题。

在使用线程时,这一点非常重要。

在你的情况下,因为a在函数foo中声明,所以它是线程的本地。因此,所有线程都应该有自己的变量副本。

假设a在此函数之外声明,那么它将是全局的,您可能必须使用Lock来确保每个线程都更新一个。