在Java中,哪些代码在多个线程之间共享,哪些代码被复制以用于一个特定的线程?
如果考虑下面的片段
,那就更准确了public void foo () {
int a = 0;
a++;
}
由多个线程同时执行,每个线程是否拥有自己的变量a
的副本,还是在线程之间共享?
答案 0 :(得分:8)
不,a
是一个局部变量。这意味着foo
的每次调用都会获得自己独立的变量 - 无论是多线程还是在同一线程中递归。
请注意,这不是关于共享代码 - 它是关于共享数据。所有线程中都会运行相同的代码(很可能),但每次调用都将使用一组单独的局部变量。
答案 1 :(得分:3)
非常好的问题。
在使用线程时,这一点非常重要。
在你的情况下,因为a在函数foo中声明,所以它是线程的本地。因此,所有线程都应该有自己的变量副本。
假设a在此函数之外声明,那么它将是全局的,您可能必须使用Lock来确保每个线程都更新一个。