《JAVA并发编程实践》第四章对象的组合

1.如何写出一个线程安全的类?

基本要素:
    找出构成对象状态的所有变量
    找出约束状态变量的不变性条件(取值范围 前验条件或者后验条件)
    建立对象状态的并发管理策略

实际中的代码
订单类包含自身的状态和商品的引用
public class Order(){
    private Integer status;
    private Product product;
    public void setStatus(Integer status){
        if(status > 10 || status < 0){
            //做其他处理 
        }
        this.status = status;
    }
    public void setProduct(Product product){
        this.product = product;
    }
    //product的getid是线程不安全的,建立并发管理策略
    public synchronized int getProduct(){
        return product.getId();
    }
}
商品类返回一个id自增的int,getid方法不是一个线程安全
public class Product(){
    private Integer id
    public int getId(){
        return id++;
    }
}

2封装-实例封闭机制

封装-实例封闭机制
   将数据封装在对象内部, 可以将数据的访问限制在对象的方法上,从而更容易确保线程在访问数据时持有正确的锁
装饰器模式
监视器模式

3委托

如果一个类由多个独立且线程安全性的状态变量组成,并且在所有的操作中都不包含无效的状态转换,那么可以将线程安全性委托给底层的状态变量,而不是这些变量的包装类。
将线程安全性委托给现有的线程安全类,他是创建线程安全类的一个最有效的策略
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章