2012-06-30 87 views
1

是新來Spring.I有一個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線程安全的?在此先感謝

+1

取決於你的業務邏輯做什麼。但是,這個代碼是線程安全的,因爲所有的變量都是本地的 –

回答

2

Spring或不是,Java 本地只要您不與其他線程手動共享對象,變量就是線程安全的。例如,如果您的「業務邏輯」代碼創建新線程並將您的本地變量傳遞給這些線程,則本地線程不是線程安全的。除此之外,它們是:每個執行線程運行你的方法將得到自己的局部變量,這是與所有其他局部變量分開的。

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