黑马程序员技术交流社区

标题: 同步与不同步 [打印本页]

作者: s476596497    时间: 2014-1-21 12:04
标题: 同步与不同步
stringBuilder替换了stringBuffer,hashMap替换掉了hashtable
两个都是后面是同步的,但是为什么我们要放弃安全的,用不安全的?还要麻烦的加上一些同步代码?
仅仅是不安全的节约资源吗?
作者: 黄晓鑫    时间: 2014-1-21 12:15
因为自己可以加锁 但线程的时候用多线程 不浪费资源吗? 比如你走在单行道的路上 路上就你一个人你需要去看有没有车来吗?
作者: jiangyutc    时间: 2014-1-21 12:37
本帖最后由 jiangyutc 于 2014-1-21 12:41 编辑

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

作者: 苏小惠    时间: 2014-1-21 13:27
StringBuffer和hashTable都是线程安全,同步的,但很多情况下我们都是用单线程来操作就够了,如果只是用单线程来操作,却经常去判断锁,会消耗了cpu资源,降低效率。同时,像hashMap之类的集合,java给我们提供了工具类Collections,里面的Collections.synchronizedMap 方法也可以解决同步问题:如下:Map m = Collections.synchronizedMap(new HashMap(...));
作者: 姜胜凯    时间: 2014-1-21 15:30
同步指的是多线程。因为多线程并发执行同一代码,会造成安全问题。但单线程执行并不会出现安全问题,如果加锁,会造成资源浪费。所以会出现新的类去替换老的类。已防止资源的浪费~
作者: 三十而立    时间: 2014-1-21 16:21
jdk升级的原因主要有三点:
1. 提高效率;
2. 简化书写;
3. 提高安全性。
楼主所提问题是jdk升级原因中的第一点:
(1)stringBuffer、hashTable是线程安全的
(2)stringBuilder、hashMap是线程不安全的。
为什么放弃安全的,提供不安全的?
(1)在现实生活中中,单线程的问题是多数的,多线程属于少数。
(2)效率高。
所以,java这种选择提供了效率高的容器,如果遇到多线程,可以自己加锁。
或者使用以前的框架类,都是可以的。
作者: 李乾    时间: 2014-1-21 16:34
StringBuffer 和 StringBuilder 的区别: StringBuffer线程安全。 StringBuilder线程不安全。  单线程操作,使用StringBuilder 效率高。 多线程操作,使用StringBuffer 安全。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2