java - 哪些变量是线程安全的?

标签 java multithreading variables thread-safety scope

我有一个 Servlet A,它在其方法之一中定义了一个局部变量 a1 ,如下所示。还有另一个类 B,在 Servlet A 中为其创建了对象,并且该对象调用该方法并执行操作。

这些变量a1a2哪一个是线程安全的,为什么?我相信 a1 是线程安全的,因为它是 A 类本地的,而 a2 不是线程安全的,因为它表现为成员变量。

class Servlet A {    
    public void method1(){
        String a1;    
        B b = new b();
        String c = b.method2(a1);    
    }  
}

class B {
    String a2;
    public String method2(String a1){
        // do operations on a1 and a2 
        return a1+a2;
    }
}

最佳答案

你是对的。方法范围的变量(局部变量)是线程安全的,因为它们位于堆栈中并且不能被其他线程访问。

成员变量(字段)存在于堆上,并且不是线程安全的,因为它们可以被多个线程同时访问。

关于java - 哪些变量是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23193121/

相关文章:

Mysql 的Prepare语句获取变量中的列值

c - 在 C 中返回局部静态

sql - 在pl/sql block 中声明变量

java - 使用 JAXB 将 XML 解码为现有对象

c++ 理解多线程中的 lock_guard 和 mutex

multithreading - 控制 Go 例程的指数生成

c# - Windows 窗体应用程序中不同线程中的 GUI 和逻辑分离

java - 我应该如何修复这个字体加载器?

java - Gradle:具有不同源和目标兼容性的多项目

java - Powermock 的问题