Vector和list 及“同步”和“线程安全”的含义

在多线程的环境中,存在一个问题,就是多个线程同时访问一个资源(比如一个ArrayList),这会引起“共享冲突”
假设一个场景:
某线程往某元素特别多的ArrayList追加元素(add),此时ArrayList正好到了它数组的边界,那么它需要扩大数组,采用的方法你可以去看源代码,会有一个拷贝数组的操作。这个动作可能非常慢,那么它有可能正好执行到一半的时候,被JVM调度到休息状态。而此时如果正好又有一个线程来删除某元素(remove)。结果是2个线程对这个ArrayList的操作将使得它变得乱七八糟。
这就是“共享冲突”。
为了克服“共享冲突”,引入了“同步”机制,也就是“锁”机制,某线程要操作对象的时候,给它加把锁,告诉其他线程,“我正在动它,你们等着”。这样,即使它被调度到休息状态,也不会有其他线程来动这个对象,直到它解锁。
这就是“线程安全”。

除了因为“同步”而影响了一定的效率外,之所以不用Vector的原因在于List更好的反应了面向对象的设计原则之一:面向接口编程,List是接口,可以有不同的实现( ArrayList就是其中的一个实现 ),这样用List的好处在于可以屏蔽具体的实现而降低耦合度。而sun之所以要引入 List的原因我个人认为就是在于Vector在设计上没有体现出这个面向对象的原则。包括现在基本都用Map而不用HashTable也是如此
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值