为了账号安全,请及时绑定邮箱和手机立即绑定

为什么JAVA很多类都放弃了安全而要速度呢

为什么JAVA很多类都放弃了安全而要速度呢

繁华开满天机 2019-03-01 10:41:13
比如hashmap和hashtable,arrylist和vector这种的,我学的时候都说是xxx不用了,区别是一个安全一个不安全,当然hashtable那个还有个null的区别,为啥要用不安全的呢
查看完整描述

7 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

你开车需要系安全带,骑摩托车需要带头盔,但是并不代表你在家睡觉也要系安全带带头盔(当然你不嫌麻烦也可以这么干)。

在单线程环境下(~在家睡觉~),你可以使用线程安全或者非现场安全的类,但是非现场安全的类通常性能更高,且在单线程情况下也不存在安全问题。

在多线程的情况下(~开车骑摩托车~),你必须牺牲性能,用线程安全的类。

查看完整回答
反对 回复 2019-03-01
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

因为使用场景有并发和非并发的区别。如果非得需要解决线程安全问题,比如集合类,它又提供了一个集合的工具类实现同步。个人理解,先追求速度,这能给用户带来体验,安全性如果需要就还可以扩展。

查看完整回答
反对 回复 2019-03-01
?
HUWWW

TA贡献1874条经验 获得超12个赞

鱼与熊掌不可兼得,线程安全通常都是要加锁和解锁的,不但会对设计上造成复杂性(比如要想办法避免死锁问题),而且会对性能造成显著的影响。

而绝大多数场景下都是单线程同步模型,压根不用考虑线程安全问题。

查看完整回答
反对 回复 2019-03-01
?
开满天机

TA贡献1786条经验 获得超13个赞

如果我理解你的问题正确: 为什么不是所有的Collections都是线程安全的?原因有:

  • 实现线程安全是非常困难,如果不是不可能的
  • 牺牲性能代价可能很大
  • 大多数应用场景下线程安全是不必要的。

所以说,你的问题看起来有点像:“有总比没有好,用不用是我的事”,答案是:“有不是总比没有好,有是需要付出代价,而这代价通常你不需要付出或尽量避免的”。因为Map/List/...应用的场景通常不需要线程安全的,所以在绝大多数的情况下HashTable/Vector/...被HashMap/ArrayList/...代替了

查看完整回答
反对 回复 2019-03-01
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

不线程安全才是默认状态。如果不特意做些事情,基本上没有东西是线程安全。所以谈不上 "放弃"。

不线程安全不等于没用,有一些情况是不需要线程安全的,少做这些事的代码可能更快。

查看完整回答
反对 回复 2019-03-01
  • 7 回答
  • 0 关注
  • 456 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信