×

stringbuffer和stringbuilder线程安全

stringbuffer和stringbuilder线程安全(“stringbuffer”与“stringbuilder”的区别)

admin admin 发表于2023-05-10 08:36:38 浏览30 评论0

抢沙发发表评论

本文目录

“stringbuffer”与“stringbuilder”的区别


二者的区别主要是在运行速度和线程安全这两方面。

1、StringBuffer 与 StringBuilder 中的方法和功能完全是等价的

2、只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。

3、在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低。


stringbuffer和stringbuilder的哪个线程安全


在大部分情况下 StringBuilder 》 StringBuffer

java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。


string stringbuffer和stringbuilder的区别


StringBuffer线程安全,但为了保证其线程安全,降低了执行效率;
StringBuilder线程不安全,执行效率略高于StringBuffer。

为什么StringBuffer是线程安全的


StringBuffer的很多方法用synchronized修饰,意味着多个线程只能互斥地调用这个方法。
例如StringBuffer的append方法,对于多线程编程,多个线程不能同时使用这个方法。
StringBuilder的方法没有这个限制。如果用于多线程程序,可能会造成错误。
一个方法包含若干语句,编译成二进制代码就更多了。线程随时可能被中断,比如时间片中断、按键中断、网卡有数据到达引发中断等。线程A在执行append,还没完成就中断了。线程B运行,也执行这个串对象的append。随后A继续append未完的部分。会造成错误。如果你学过OS就会知道这点。

怎么理解Stringbuffer 是线程安全的 stringbuilder是线程不安全的


线程安全与否主要就是体现在多线程并发的场景下,很多线程共同对一个资源进行操作,那么这多的操作,包括例如几个人同时往一个string追加字符,可能你期望它是 abcd,但事实得到的是ahhsbcd,这样错误的结果。因为是多线程环境,如果不处理这个并发问题那么结果很可能就乱了。所以。Stringbuffer说他是线程安全的,是它在底层做了安全同步的操作,保证追加字符串的安全性、得想要的结果。

java stringbuilder 和stringbuffer的线程安全性


stringbuffer与stringbuilder 的方法都是一样的,只不过stringbuffer 的方法都是同步的方法,就是线程安全的.
2者性能差的不是很多的。
如果自己用lock来写也行,不过要注意锁的释放,防止死锁。

stringbuffer和stringbuilder哪个线程安全


1、StringBuffer 字符串变量(线程安全)
2、StringBuilder 字符串变量(非线程安全)
3、在大部分情况下 两者方法相同,运行速度StringBuilder 》 StringBuffer
4、线程安全与否的概述:
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
线程安全问题都是由全局变量及静态变量引起的。
若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。

stringbuffer 和 stringbuilder 的区别


1、这两个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。
2、首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder 》 StringBuffer
3、在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
4、StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

stringbuffer和stringbuilder的区别 线程


  1. 在执行速度方面的比较:StringBuilder 》  StringBuffer  

  2. StringBuilder:线程非安全的

    StringBuffer:线程安全的

    当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

  3.  如果要操作少量的数据用 = String

    单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

    多线程操作字符串缓冲区 下操作大量数据 = StringBuffer