单例模式中的方法变量

时间:2012-06-30 09:53:16

标签: java spring spring-mvc singleton

是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是否是线程安全的?提前感谢

2 个答案:

答案 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();
 }