到底什么才是线程安全。

解决方案 »

  1.   

    比如多个线程,同时向一个对象进行操作时,StringBuffer就是安全的,不会出现内部的混乱,而StringBuilder则不是,可能产生数据混乱。
      

  2.   

    多线程竞争的一个例子
    许多人吃完饭了,去盛一碗汤。
    盛汤有几个步骤
    1 把碗放在桌子上
    2 拿起汤勺盛汤
    3 把汤倒倒入碗里最典型的冲突就是
    1 你拿了一个小碗(属性值比较较小,比如size=3)
    2 你去盛汤
    3 另一个也拿了一个大碗(比如size=8),因为一个类只有一个属性,所以你的碗被人替换掉了
    4 你盛的汤倒入的,已经不再是你期望的那个碗了,当然倒入碗里后的结果也是不对的(不满或者溢出了)
      

  3.   

    StringBuffer是线程安全的.
    StringBuilder不是线程安全的,它的运行速度比StringBuffer快.
      

  4.   

    对,StringBuilder在jdk5以上版本中才出现的
      

  5.   

    StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。 当发生与源序列有关的操作(如源序列中的追加或插入操作)时,该类只在执行此操作的字符串缓冲区上而不是在源上实现同步。 每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。 
      

  6.   

    StringBuffer线程安全,效率低点。其他基本没什么差别
      

  7.   

    线程安全就是同步的,但是速度慢
    线程不安全就是不同步的,但是速度快
    java代码在编译的时候,会自动把安全的String转换为StringBuilder来处理,以提高效率
      

  8.   

    我在开发过程中一直用的就是stringbuffer,这个安全性没问题的.
      

  9.   

    没有线程同步问题的时候先考虑使用StringBuilder,效率要高些
      

  10.   

    java2000_net 把线程安全性描述得非常形象。
    也可以说,如果单线程运行与多线程并行运行处理的结果都对,没有造成混乱那就说明是线程安全的。
      

  11.   

    JDK API:
    StringBuilder
     This class provides an API compatible with StringBuffer, but with no guarantee of synchronization. This class is designed for use as a drop-in replacement for StringBuffer in places where the string buffer was being used by a single thread (as is generally the case). Where possible, it is recommended that this class be used in preference to StringBuffer as it will be faster under most implementations. 
      

  12.   

    我知道StringBuffer和String的区别,但是StringBuilder就不太熟悉了呵呵^_^
      

  13.   

    it's means you shouldn't let the resources used by your code to be corrupted.
      

  14.   

    记得去年10月我在公司请教过一个前辈 这个问题
    他只说 单线程用 StringBuilder,多线程用StringBuffered,更安全
    看了这里的,我更加清楚了他们的区别~~哈哈
      

  15.   

    之前都没有接触过StringBuilder,只知道StringBuffer
    现在搞懂了,哈哈,感谢了!
    以后要多来CSDN呢,能够学到很多东西呢!
      

  16.   


    StringBuilder是在JAVA 5.0里从C#搬过来的。习惯用StringBuffer的继续用就是,这个StringBuilder 是让c#转java的人员习惯的。
      

  17.   

    当是单线程的时候常用StringBuilder,因为在实现中比StringBuffer快。
    但是当多线程的时候StringBuffer比较安全
      

  18.   

    单一线程中用StringBuffer 
    多线程中用StringBuilder
      

  19.   

    StringBuilder 的功能 跟
    String a;
    a+ new String()+new String
    的效果差不多而且 编译器 自动把Stringa;a=a+newString();译成为
    StringBuilder a ;
    a.append(new String());