A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© s476596497 中级黑马   /  2014-1-21 12:04  /  1852 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

stringBuilder替换了stringBuffer,hashMap替换掉了hashtable
两个都是后面是同步的,但是为什么我们要放弃安全的,用不安全的?还要麻烦的加上一些同步代码?
仅仅是不安全的节约资源吗?

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

6 个回复

倒序浏览
因为自己可以加锁 但线程的时候用多线程 不浪费资源吗? 比如你走在单行道的路上 路上就你一个人你需要去看有没有车来吗?
回复 使用道具 举报
本帖最后由 jiangyutc 于 2014-1-21 12:41 编辑

这里的安全指的是线程安全,同步是对于多线程而言的
单线程就没必要

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

回复 使用道具 举报
StringBuffer和hashTable都是线程安全,同步的,但很多情况下我们都是用单线程来操作就够了,如果只是用单线程来操作,却经常去判断锁,会消耗了cpu资源,降低效率。同时,像hashMap之类的集合,java给我们提供了工具类Collections,里面的Collections.synchronizedMap 方法也可以解决同步问题:如下:Map m = Collections.synchronizedMap(new HashMap(...));

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

回复 使用道具 举报
同步指的是多线程。因为多线程并发执行同一代码,会造成安全问题。但单线程执行并不会出现安全问题,如果加锁,会造成资源浪费。所以会出现新的类去替换老的类。已防止资源的浪费~
回复 使用道具 举报
jdk升级的原因主要有三点:
1. 提高效率;
2. 简化书写;
3. 提高安全性。
楼主所提问题是jdk升级原因中的第一点:
(1)stringBuffer、hashTable是线程安全的
(2)stringBuilder、hashMap是线程不安全的。
为什么放弃安全的,提供不安全的?
(1)在现实生活中中,单线程的问题是多数的,多线程属于少数。
(2)效率高。
所以,java这种选择提供了效率高的容器,如果遇到多线程,可以自己加锁。
或者使用以前的框架类,都是可以的。

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

回复 使用道具 举报
李乾 中级黑马 2014-1-21 16:34:42
7#
StringBuffer 和 StringBuilder 的区别: StringBuffer线程安全。 StringBuilder线程不安全。  单线程操作,使用StringBuilder 效率高。 多线程操作,使用StringBuffer 安全。

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马