我有一个Servlet A,它在一个方法中定义了一个局部变量a1
,如下所示。还有另一个B类,在Servlet A中为其创建对象,该对象调用该方法并进行操作。
这些变量a1
和a2
中的哪一个是线程安全的,为什么?我相信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;
}
}
答案 0 :(得分:4)
你是对的。方法范围的变量(局部变量)是线程安全的,因为它们存在于堆栈中,而其他线程无法访问它们。
成员变量(字段)存在于堆上并且不是线程安全的,因为它们可以被多个线程同时访问。