1. 程式人生 > >我對線程安全的理解

我對線程安全的理解

color ont shared data stat 同學 style 發現 out

Wiki的解釋如下

Thread safety is a computer programming concept applicable to multi-threaded code. 
Thread-safe code only manipulates shared data structures in a manner that ensures that all threads behave properly
and fulfil their design specifications without unintended interaction.
There are various strategies for
making thread-safe data structures

關鍵詞就在這幾個加粗的字體,是針對多線程的場合的共享數據,為了防止出現不確定的結果(多次執行結果的不確定性)。

舉例:下面代碼如果不加synchronized的話如果兩個線程通知去i++,有可能就會出現覆蓋的情況,而不是另一個線程去等待第一個完成後再去 i++

class Counter {
    private static int i = 0;

    public synchronized void inc() {
        i++;
    }
}

至於HashTable是線程安全,而HashMap不是。StringBuffer是線程安全的,而StringBuilder不是。無非也是這個道理,自我實現線程安全也就是保證同一時間只有一個線程來訪問我,這樣就會避免覆蓋的情況。如果閱讀過StringBuffer的同學都會發現,它的所有方法前面都加了synchronized

,如此而已。

當然,除了用這樣的方法避免之外,另外的思路就是避免線程共享變量,比如使用每次class都新重新構造,使用局部變量,只允許初始化一次

我對線程安全的理解