当前位置: 首页 > 面试题库 >

为什么要使用StringBuilder?StringBuffer可以同时使用多个线程吗?

唐博文
2023-03-14
问题内容

假设我们的应用程序只有一个线程。然后我们正在使用,StringBuffer这是什么问题?

我的意思是,如果StringBuffer可以通过同步处理多个线程,那么使用单线程有什么问题?

为什么要StringBuilder改用?


问题答案:

StringBuffers线程安全的,这意味着它们具有同步的方法来控制访问,因此一次只有一个线程可以访问StringBuffer对象的同步代码。因此,在多个线程可能试图同时访问同一StringBuffer对象的多线程环境中,StringBuffer对象通常是安全的。

StringBuilder's访问未同步,因此不是线程安全的。通过不同步,StringBuilder的性能可以比StringBuffer更好。因此,如果您在单线程环境中工作,则使用StringBuilder而不是StringBuffer可能会提高性能。在诸如StringBuilder局部变量(即方法中的变量)之类的其他情况下也是如此,其中只有一个线程将访问StringBuilder对象。

所以,StringBuilder因为

  • 性能增益小。
  • StringBuilder是StringBuffer类的1:1替代品。
  • StringBuilder不是线程同步的,因此在大多数Java实现上表现更好

看一下这个 :

  • 不要使用StringBuffer!
  • StringBuffer与StringBuilder的性能比较


 类似资料:
  • 本文向大家介绍为什么要使用多线程?相关面试题,主要包含被问及为什么要使用多线程?时的应答技巧和注意事项,需要的朋友参考一下 先从总体上来说: 从计算机底层来说:线程可以比作是轻量级的进程,是程序执行的最小单位,线程间的切换和调度的成本远远小于进程。另外,多核 CPU 时代意味着多个线程可以同时运行,这减少了线程上下文切换的开销。 从当代互联网发展趋势来说:现在的系统动不动就要求百万级甚至千万级的并

  • 问题内容: 我是第一次遇到,很惊讶,因为Java已经具有一个非常强大的类,可以追加。 为什么要上第二堂课? 在哪里可以了解更多信息? 问题答案: 不允许附加。你在上调用的每个方法都会创建一个新对象并返回它。这是因为String它是不可变的-无法更改其内部状态。 另一方面是可变的。调用时,它会更改内部char数组,而不是创建新的字符串对象。 因此,拥有: 而不是,这将创建500个新的字符串对象。 请

  • 我试图理解,如果可以使用,是什么让并发锁如此重要。在下面的伪代码中,我可以执行以下任一操作: 同步整个方法或同步脆弱区域(

  • 问题内容: 我试图了解是什么使并发锁如此重要,如果可以使用的话。在下面的虚拟代码中,我可以执行以下任一操作: 同步了整个方法或同步了易受攻击的区域() 或使用ReentrantLock锁定易受攻击的代码区域。 码: 问题答案: 一个ReentrantLock的是非结构化的,不像结构-即你不需要使用块结构锁,甚至可以举行跨越方法的锁。一个例子: 这样的流程不可能通过构造中的单个监视器来表示。 除此之

  • 问题内容: 我最近遇到了一个Java 8类,该类使用定界符添加String并向其添加前缀和后缀,但是我无法理解此类的需要,因为它也在后端使用,并且执行非常简单的附加操作字符串。 我是否没有真正理解本堂课的真正目的而错过了某些东西? 问题答案: 当您需要在中将Strings连接时,此功能非常有用。 例如,如果您必须遵循以下字符串列表: 使用起来更简单 就像使用: 六年后编辑 如评论中所述,现在有许多

  • 问题内容: 据我所知,Tornado是一台服务器和一个框架。在我看来,一起使用Flask和Tornado就像添加另一个抽象层(更多的开销)。人们为什么同时使用Flask和Tornado,有什么优势? 问题答案: 据我所知,Tornado是一台服务器和一个框架。在我看来,一起使用Flask和Tornado就像添加另一个抽象层(更多的开销)。人们为什么同时使用Flask和Tornado,有什么优势?根