我對線程安全的理解
阿新 • • 發佈:2017-08-24
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 formaking 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都新重新構造,使用局部變量,只允許初始化一次
我對線程安全的理解