•若是對象在被建立後,狀態就不能被修改,那麼他就是不可變的•具備不變性的對象,必定是線程安全的,咱們不須要採起任何額外的安全措施,也能保證線程安全編程
•被final關鍵字修飾的類不能被繼承,被final關鍵字修飾的類屬性和類方法不能被覆蓋(重寫);安全
修飾變量 :不能被改變修飾方法:ide
•構造方法不容許修飾•不可被重寫,也就是不能被override,即使子類有一樣名字的方法,那也不是override修飾類:•final關鍵字修飾的類不能被繼承•ui
•final 修飾對象的時候,只有對象的引用不可變,而對象自己的屬性是能夠變的•final使用原則,良好的編程習慣spa
•基本數據類型,確實被final修飾的就是不可變的•可是對於對象類型,須要該對象保證本身被建立後,狀態永遠不變才能夠線程
不可變的第二種狀況orm
把變量寫在線程內部,----棧封閉對象
•在方法裏新建局部變量,其實是存儲在每一個線程私有棧空間,而每一個棧空間不能被其餘線程訪問到,因此,不會出現線程安全問題,這就是著名的 「棧封閉」 技術blog