Java:代码验证 StringBuffer 线程安全,StringBuilder 非线程安全
首先需要明白什么是线程安全,什么是非线程安全,引用百度百科
关于 Java 中 String,StringBuffer 和 StringBuilder 的区别,参看:
Java:String,StringBuilder,StringBuffer 区别
下面用代码进行验证:
1 定义一个线程类,循环执行 StringBuffer 和 StringBuilder 的 append 方法,执行一次线程休眠 10 毫秒
class CustomThread extends Thread {private StringBuffer buffer;private StringBuilder builder;public CustomThread(StringBuffer buffer, StringBuilder builder) {this.buffer = buffer;this.builder = builder;}@Overridepublic void run() {for (int i = 0; i < 1000; i++) {buffer.append("A");builder.append("Z");try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("StringBuffer Size:" + buffer.length() + " | "+ "StringBuilder Size:" + builder.length());}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
2 定义测试方法,循环新建 10 个线程类并调用 start 方法
public static void main(String[] args) {StringBuffer buffer = new StringBuffer();StringBuilder builder = new StringBuilder();for (int i = 0; i < 10; i++) {new CustomThread(buffer, builder).start();}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
3 测试结果,10个线程,每个线程循环1000次,如果线程安全则全部执行完成后字符串长度应该都是 10 * 1000 = 10000,测试结果中显示 StringBuffer 最终长度的确是 10000,StringBuilder 最大长度只有9956,说明 StringBuilder 非线程安全
Java:代码验证 StringBuffer 线程安全,StringBuilder 非线程安全相关推荐
- JAVA中的线程安全与非线程安全
ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?StringBuilder和StringBuffer有什么区别?这些都是Java面试中常见的基础问题.面对这样 ...
- JAVA中的线程安全与非线程安全,java面试题,java高级笔试题
写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 转自 ...
- Java多线程:线程安全和非线程安全的集合对象
转载自 Java多线程:线程安全和非线程安全的集合对象 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到 ...
- PHP - 版本选择 - 线程安全与非线程安全 - 学习/实践
1.应用场景 主要用于弄清楚为什么会有线程安全与非线程安全的不同语言版本,以及这种情况是不是一直存在, 是否有解决统一的办法吗- 2.学习/操作 1.文档阅读 PHP For Windows: Bin ...
- java.lang包—StringBuffer类和StringBuilder类
目录 一.数据结构 二.线程安全性分析 三.源码 四.适用场景 一.数据结构 在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串.String 类是不可变类,即一旦一 ...
- 【java的socket编程】结合多线程Thread实现通信(使用线程池和非线程池对比)、java开发UDP/IP网络程序
结合多线程实现socket 使用非线程池(拓展Thread) 使用线程池(Executor pool) 使用DatagramPacket DatagramSocket开发UDP/IP程序 使用UDP获 ...
- PHP线程安全和非线程安全的区别
Windows版的PHP从版本5.2.1开始有Thread Safe.这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍. 从2000年10月20日发布的第一个Windows版的PHP3.0.1 ...
- php+linux+线程安全,PHP 线程安全与非线程安全版本的区别深入解析
从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方 ...
- php mysql 线程安全_PHP 线程安全与非线程安全版本的区别深入解析
从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方 ...
最新文章
- 神经网络基础知识梳理
- 第八届国际BCI会议(2021 Virtual BCI meeting)
- 最小代价生成树Prim/Kruskal(c/c++)
- 什么是Java Marker Interface(标记接口)
- P2150-[NOI2015]寿司晚宴【dp】
- Linux——CentOS建立一个最高权限的用户
- 数据库生成数据字典工具(PDMREAD)图解
- 了解了广告行业利益相关方,横扫一切商业模式
- QQ连连看外挂核心算法(检测两点能否连通)
- Charles+Chrome+https,提示隐私设置错误,您的连接不是私密连接
- 算法分析之常用符号大O、小o、大Ω符号、大Θ符号、w符号
- 红芯宣布获得2.5亿元C轮系列融资,要做1亿人的安全工作入口
- 软件测试怎么学?如何系统学习软件测试?
- Unity_触摸屏_实现360序列帧
- Photoshop touch教程全攻略
- 马克思与他的脑机接口
- mall4j的小程序商城(java)
- 验证码总是错误问题的总结
- Niagara_Advanced内容示例 1.2 Advect Grid 2D Collection
- oracle函数自定义日历周获取周数