1 怎麼理解發布和逸出?
轉自別人的回答講的很詳細
點擊這裏
2.如何構造一個安全的對象?
不可變的對象一定是線程安全的
在多線程訪問這個不可變的對象時,對象的實例域都是固定不變的,也就不存在多線程環境寫操作帶來的失效數據的問題。
什麼樣的對象纔是不可變的?
對象創建後其狀態就不能修改
對象所有的域都是final類型
對象是正確創建的,創建期間,this引用沒有逸出
個人理解
public class Pojo{
private final String name;
private final Integer age;
public Pojo(){
name = "lilei";
age = 1;
}
}
實際的項目中碰到的都是可變的對象,那如何保證這些對象的線程安全性?
同步
3.如何安全的發佈一個對象
靜態初始化函數中初始化一個對象引用
將該引用保存在 volatile 或者 AtomicReferance對象中
或者 保存到某個正確構造對象的final類型域中
或者 保存到一個由鎖保護的域中