是Spring的新手。我有一个spring bean countService,它是一个单例
public class CountService {
private int doCount() {
String commentsText = null;
List tranIds = new ArrayList();
int count = 0;
// ---business logic----
return count;
}
}
方法变量是remarkText,tranIds是否是线程安全的?提前感谢
答案 0 :(得分:2)
Spring是否,Java local 变量是线程安全的,只要您不与其他线程手动共享其对象。例如,如果您的“业务逻辑”代码创建新线程并将本地变量传递给这些线程,则本地变量不是线程安全的。除此之外,它们是:运行方法的每个执行线程都将获得自己的局部变量,该变量与所有其他局部变量分开。
答案 1 :(得分:2)
如果线程之间没有共享状态,则代码是线程安全的。
因此,如果只有局部变量,则该方法是线程安全的。当然,如果这些局部变量实际上是对共享对象的引用,并且这些共享对象不是线程安全的,那么就会出现问题。
但是如果方法使用的所有对象都是由方法本身创建的,那么就不会共享任何内容,并且您是安全的。
线程安全代码示例:
public int foo(String a, String b) {
List<String> list = new ArrayList<>(); // the list is local to the method
// do some work with the list
return list.size();
}
非线程安全代码示例:
public int foo(String a, String b) {
List<String> list = SomeClass.getSomeStaticListReference(); // the list is shared between threads
// do some work with the list
return list.size();
}