java synchronized c_这是Java SynchronizedCollection类中的错误吗?

在java.util.Collections中有一个内部类SynchronizedCollection

有两个构造函数.第一个采用集合,另一个采用集合和互斥.

前构造函数检查参数是否为空.但后来不要!

这是实施.

SynchronizedCollection(Collection c) {

if (c==null)

throw new NullPointerException();

this.c = c;

mutex = this;

}

SynchronizedCollection(Collection c, Object mutex) {

this.c = c;

this.mutex = mutex;

}

通过这个实现,我可以通过向第二个发送null来打破类不变量

构造函数.

我相信它应该是这样的:

SynchronizedCollection(Collection c) {

this(c,this)

}

SynchronizedCollection(Collection c, Object mutex) {

if (c==null)

throw new NullPointerException();

this.c = c;

this.mutex = mutex;

}

但是我不能说服自己Josh Bloch和Neal Gafter看不到这一点.所以你真的可以告诉我在这里错过了什么吗?

编辑:可能的攻击

Map m = new Map(){

@Override

public int size() {

// TODO Auto-generated method stub

return 0;

}

.

.

.

@Override

public Collection values() {

return null;

}

};

Map synchronizedMap = Collections.synchronizedMap(m);

Collection values = synchronizedMap.values();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值