哪些变量是线程安全的?

时间:2014-04-21 07:44:06

标签: 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;
    }
}

1 个答案:

答案 0 :(得分:4)

你是对的。方法范围的变量(局部变量)是线程安全的,因为它们存在于堆栈中,而其他线程无法访问它们。

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