首页 > 其他分享 >我们说StringBuilder是线程不安全的,是什么原因呢?

我们说StringBuilder是线程不安全的,是什么原因呢?

时间:2023-03-19 11:11:28浏览次数:48  
标签:String StringBuffer 安全 线程 StringBuilder 字符串

在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。

因此当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

StringBuilder 和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。但由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

为什么说StringBuilder是线程不安全的?

因为相对StringBuffer,StringBuilder没有在方法上使用 synchronized 关键字。synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。

分析下线程不安全的原因:StringBuilder中针对字符串的处理主要依赖两个成员变量char数组value和count。StringBuilder通过对value的不断扩容和count对应的增加来完成字符串的append操作。

 

参考:

标签:String,StringBuffer,安全,线程,StringBuilder,字符串
From: https://www.cnblogs.com/xfeiyun/p/17232618.html

相关文章

  • 多线程篇-交替打印
    背景有如下需求:线程1打印5次a,线程2打印5次b,线程3打印5次c,要求最后的结果是abcabcabcabc步骤简单情况先考虑简单的情况,然后进行拓展。简单版需求:线程1打印1,线程2......
  • Day 17 17.3 多线程实现之线程池
    多线程实现之线程池1引入系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互。在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量......
  • 两个线程交替打印26个字母
    代码#include<iostream>#include<thread>#include<mutex>#include<condition_variable>usingnamespacestd;mutexmtx;condition_variablecv;boolflag=t......
  • 数据安全始终是一个不可忽视的问题
    最近,自己的一个测试环境,遭遇了hacker攻击。具体是oracle用户被攻破了,原因是该环境通过DDNS连接到了外网,而因为只是测试,没有注意安全防范,设置的口令过于简单。下面记录下,......
  • 多线程编程五:信号量
    2.33.信号量的概念_哔哩哔哩_bilibili2.34.信号量的工作机制_哔哩哔哩_bilibili......
  • 【THM】Careers in Cyber(网络安全职业介绍)-学习
    本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/careersincyber本文介绍:了解网络安全领域的不同职业。简介网络安全行业有许多不同的工作种类,主要分为进......
  • 谈谈你对Java中常用的几种线程池的理解
    为什么使用线程池为每个请求创建一个新线程的开销很大容易引起资源不足,造成浪费使用线程池的风险死锁、资源不足和线程泄漏。死锁当一组进程或线程中的每一个都在......
  • 线程池的参数如何设置?(蚂蚁一面)
    核心线程数:如果任务是CPU密集型,即计算任务比较多,可以设置线程数为核心数+1,这样可以让CPU资源得到充分利用。如果任务是IO密集型,即网络请求比较多,可以根据实际情况设......
  • PentestLab-web安全SQL注入-EXP6
    我们打开靶机,选择“SQL Injections”选择“Example6”观察页面我们使用工具测试参数为-u"http://192.168.29.148/sqli/example6.php?id=2"--dumpall开始测试没有发现我......
  • 深入浅出QPS、RT和最佳线程数
    1什么是QPS:QPS是每秒钟处理完请求的次数。这里的请求不是指一个查询或者数据库查询,是包括一个业务逻辑的整个流程,也就是说每秒钟响应的请求次数。2什么是响应时间(RT):......