@[toc]
什麼是不變性
- 如果對象在被創建後,狀態就不能被修改,那麼他就是不可變的
- 具有不變性的對象,一定是線程安全的,我們不需要採取任何額外的安全措施,也能保證線程安全
final的作用
- 被final關鍵字修飾的類不能被繼承,被final關鍵字修飾的類屬性和類方法不能被覆蓋(重寫);
3種用法:修飾方法,變量,類
修飾變量 :不能被改變
修飾方法:
- 構造方法不允許修飾
- 不可被重寫,也就是不能被override,即便子類有同樣名字的方法,那也不是override
修飾類:
- final關鍵字修飾的類不能被繼承
注意點
- final 修飾對象的時候,只有對象的引用不可變,而對象本身的屬性是可以變的
- final使用原則,良好的編程習慣
不變性和final的關係
- 基本數據類型,確實被final修飾的就是不可變的
- 但是對於對象類型,需要該對象保證自己被創建後,狀態永遠不變才可以
不可變的第二種情況
把變量寫在線程內部,----棧封閉
- 在方法裡新建局部變量,實際上是存儲在每個線程私有棧空間,而每個棧空間不能被其他線程訪問到,所以,不會出現線程安全問題,這就是著名的 “棧封閉” 技術