Java 多线程之间的共享数据和唯一数据
在Java中,哪些代码在多个线程之间共享,哪些代码被复制以用于一个特定线程Java 多线程之间的共享数据和唯一数据,java,multithreading,Java,Multithreading,在Java中,哪些代码在多个线程之间共享,哪些代码被复制以用于一个特定线程 如果考虑下面的片段也会更精确。 public void foo () { int a = 0; a++; } 由多个线程并发执行时,每个线程都会保存变量a的自己的副本,还是在线程之间共享?否,a是一个局部变量。这意味着对foo的每次调用都会得到自己的独立变量——无论是在多个线程中还是在同一线程中递归调用 请注意,这不是关于共享代码,而是关于共享数据。相同的代码将在所有线程中运行(很可能),但每次调用
如果考虑下面的片段
也会更精确。public void foo () {
int a = 0;
a++;
}
由多个线程并发执行时,每个线程都会保存变量
a
的自己的副本,还是在线程之间共享?否,a
是一个局部变量。这意味着对foo
的每次调用都会得到自己的独立变量——无论是在多个线程中还是在同一线程中递归调用
请注意,这不是关于共享代码,而是关于共享数据。相同的代码将在所有线程中运行(很可能),但每次调用都将使用一组单独的局部变量。否,
a
是一个局部变量。这意味着对foo
的每次调用都会得到自己的独立变量——无论是在多个线程中还是在同一线程中递归调用
请注意,这不是关于共享代码,而是关于共享数据。相同的代码(很可能)将在所有线程中运行,但每次调用都将使用一组单独的局部变量。这是一个很好的问题
在一般情况下使用线程时,理解这一点非常重要
在您的例子中,由于a是在函数foo中声明的,因此它是线程的本地。因此,所有线程都应该有自己的变量副本
假设a在这个函数之外声明,那么它将是全局的,您可能需要使用Lock来确保a由每个线程更新 问得好
在一般情况下使用线程时,理解这一点非常重要
在您的例子中,由于a是在函数foo中声明的,因此它是线程的本地。因此,所有线程都应该有自己的变量副本
假设a在这个函数之外声明,那么它将是全局的,您可能需要使用Lock来确保a由每个线程更新 乔恩,非常感谢你。非常感谢你的帮助。乔恩,非常感谢。非常感谢您的帮助。谢谢您的回复。谢谢您的回复。