多线程:Immutable对象?如何创建Immutable对象?
那么什么是immutable objects?什么又是mutable Objects呢?
immutable Objects就是那些一旦被創建,它們的狀態就不能被改變的Objects,每次對他們的改變都是產生了新的immutable的對象,而mutable Objects就是那些創建后,狀態可以被改變的Objects.
舉個例子:
String和StringBuilder,String是immutable的,每次對于String對象的修改都將產生一個新的String對象,而原來的對象保持不變,而StringBuilder是mutable,因為每次對于它的對象的修改都作用于該對象本身,并沒有產生新的對象。
但有的時候String的immutable特性也會引起安全問題,這就是密碼應該存放在字符數組中而不是String中的原因!
使用Immutable對象的好處?
1)Immutable對象是線程安全的,可以不用被synchronize就在并發環境中共享
2)Immutable對象簡化了程序開發,因為它無需使用額外的鎖機制就可以在線程間共享
3)Immutable對象提高了程序的性能,因為它減少了synchroinzed的使用
總的來說,本身就是線程安全的,避免了synchronized的使用。
如何在Java中寫出Immutable的類?
要寫出這樣的類,需要遵循以下幾個原則:
1)immutable對象的狀態在創建之后就不能發生改變,任何對它的改變都應該產生一個新的對象。(克隆)
2)Immutable類的所有的屬性都應該是final的。(屬性初始化后不能被修改)
3)對象必須被正確的創建,比如:對象引用在對象創建過程中不能泄露(leak)。
4)對象應該是final的,以此來限制子類繼承父類,以避免子類改變了父類的immutable特性。
5)如果類中包含mutable類對象,那么返回給客戶端的時候,返回該對象的一個拷貝,而不是該對象本身(該條可以歸為第一條中的一個特例)?
如何創建Immutable對象?
總結
以上是生活随笔為你收集整理的多线程:Immutable对象?如何创建Immutable对象?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程:当你提交任务时,线程队列已经满了
- 下一篇: IO:IO知识点