黑马程序员技术交流社区

标题: 想请教一下,类中线程同步和不同步的区别?求指教 [打印本页]

作者: 阿凡提不买驴    时间: 2013-7-9 19:11
标题: 想请教一下,类中线程同步和不同步的区别?求指教
本帖最后由 杨兴庭 于 2013-7-9 21:12 编辑

例如:StringBuffer类是线程同步的;而StringBuilder是线程不同步的,这两者在具体应用时候的区别在哪里?最好用实例说明,O(∩_∩)O谢谢
作者: denghui1010    时间: 2013-7-9 19:18
线程同步更安全,但是效率会降低,因为每次都要判断
线程不同步,多线程的时候就会有安全问题,但是效率高,所以单线程时用StringBuilder
至于到底什么样的安全问题,请看毕老师视频第11天-09-多线程(多线程的安全问题)
作者: 王靖远    时间: 2013-7-9 19:21
单线程时候用StringBuilder效率高。
多线程时候用StringBuffer,因为StringBuilder没有同步,可能会出现2个引用同时访问一个对象的情况出现。
作者: 黑马2014    时间: 2013-7-9 19:55
StringBuffer类线程安全的可变字符序列。类似于String 的字符串缓冲区,但不能修改。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从JDK 5.0 开始,为该类增添了一个单个线程使用的等价类,即StringBuilder 。与该类相比,通常应该优先使用StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。但是如果将StringBuilder 的实例用于多个线程是不安全的。需要这样的同步,则建议使用StringBuffer 。

   


   




作者: 阿凡提不买驴    时间: 2013-7-9 20:15
谢谢各位……
作者: 杨兴庭    时间: 2013-7-9 21:12
denghui1010 发表于 2013-7-9 19:18
线程同步更安全,但是效率会降低,因为每次都要判断
线程不同步,多线程的时候就会有安全问题,但是效率高 ...

技术分够了哦。。祝愿顺利入学:handshake
作者: denghui1010    时间: 2013-7-9 21:22
杨兴庭 发表于 2013-7-9 21:12
技术分够了哦。。祝愿顺利入学

感谢天,感谢地啊:kiss:
作者: 杨兴庭    时间: 2013-7-9 21:24
denghui1010 发表于 2013-7-9 21:22
感谢天,感谢地啊

还有感谢版主哦。。。呵呵:)
作者: denghui1010    时间: 2013-7-9 21:26
杨兴庭 发表于 2013-7-9 21:24
还有感谢版主哦。。。呵呵

那必须的,所以给了你一个大大的红唇....虽然我是男的




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