7 回答
TA贡献1829条经验 获得超4个赞
你开车需要系安全带,骑摩托车需要带头盔,但是并不代表你在家睡觉也要系安全带带头盔(当然你不嫌麻烦也可以这么干)。
在单线程环境下(~在家睡觉~),你可以使用线程安全或者非现场安全的类,但是非现场安全的类通常性能更高,且在单线程情况下也不存在安全问题。
在多线程的情况下(~开车骑摩托车~),你必须牺牲性能,用线程安全的类。
TA贡献1848条经验 获得超10个赞
因为使用场景有并发和非并发的区别。如果非得需要解决线程安全问题,比如集合类,它又提供了一个集合的工具类实现同步。个人理解,先追求速度,这能给用户带来体验,安全性如果需要就还可以扩展。
TA贡献1874条经验 获得超12个赞
鱼与熊掌不可兼得,线程安全通常都是要加锁和解锁的,不但会对设计上造成复杂性(比如要想办法避免死锁问题),而且会对性能造成显著的影响。
而绝大多数场景下都是单线程同步模型,压根不用考虑线程安全问题。
TA贡献1786条经验 获得超13个赞
如果我理解你的问题正确: 为什么不是所有的Collections都是线程安全的?原因有:
- 实现线程安全是非常困难,如果不是不可能的
- 牺牲性能代价可能很大
- 大多数应用场景下线程安全是不必要的。
所以说,你的问题看起来有点像:“有总比没有好,用不用是我的事”,答案是:“有不是总比没有好,有是需要付出代价,而这代价通常你不需要付出或尽量避免的”。因为Map/List/...应用的场景通常不需要线程安全的,所以在绝大多数的情况下HashTable/Vector/...被HashMap/ArrayList/...代替了
TA贡献2041条经验 获得超4个赞
不线程安全才是默认状态。如果不特意做些事情,基本上没有东西是线程安全。所以谈不上 "放弃"。
不线程安全不等于没用,有一些情况是不需要线程安全的,少做这些事的代码可能更快。
添加回答
举报