1

我是 Spring 新手。我有一个 spring bean countService,它是一个单例

public class CountService {
    private int doCount() {
        String commentsText = null;
        List tranIds = new ArrayList();
        int count = 0;
        // ---business logic----

        return count;
    }
}

方法变量 commentsText,tranIds 线程安全吗?提前致谢

4

2 回答 2

2

无论是否使用 Spring,只要您不与其他线程手动共享它们的对象,Java局部变量都是线程安全的。例如,如果您的“业务逻辑”代码创建新线程并将局部变量传递给这些线程,则局部变量不是线程安全的。除此之外,它们是:运行您的方法的每个执行线程都将获得自己的局部变量,该变量与所有其他局部变量分开。

于 2012-06-30T10:01:53.290 回答
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();
 }
于 2012-06-30T10:03:26.433 回答