关于ImproveList我前前后后消化了很长时间!
public class ImprovedList<T> implements List<T> {
private final List<T> list;
public ImprovedList(List<T> list) {
this.list = list;
}
public synchronized boolean putIfAbsent(T x){
boolean contains = list.contains(x);
if(contains) {
list.add(x);
}
return !contains;
}
public synchronized void clear() {
list.clear();
}
}
最后得到结论是这个类是线程安全的!但是不是一个不可变类!他线程安全,是因为成员变量list为private,所以其他线程没法访问!虽然他的构造函数,没有对其进行深度克隆!另外没有使用锁来让其线程安全,但是线程安全定义是状态不可以改变!因为list是final,则当另外一个线程进来的时候!list也是不可进行改变的!另外list.container是在ImproveList对象上的!所以,在方法体上面加锁!也就是把list锁住了!因此线程安全!