【问题标题】:Shared data and unique data among multiple threads多线程间共享数据和唯一数据
【发布时间】:2013-12-25 20:51:29
【问题描述】:

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

如果考虑以下片段,那就太精确了

public void foo () {

    int a = 0;

    a++;
}

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

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

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

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

    【讨论】:

    • 乔恩,非常感谢。非常感谢您的帮助。
    【解决方案2】:

    非常好的问题。

    在一般情况下使用线程时理解这一点非常重要。

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

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

    【讨论】:

    • 感谢您的帮助。
    猜你喜欢
    • 2011-08-29
    • 2011-07-08
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多