首先需要明白什么是线程安全,什么是非线程安全,引用百度百科 

关于 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 非线程安全相关推荐

  1. JAVA中的线程安全与非线程安全

    ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?StringBuilder和StringBuffer有什么区别?这些都是Java面试中常见的基础问题.面对这样 ...

  2. JAVA中的线程安全与非线程安全,java面试题,java高级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 转自 ...

  3. Java多线程:线程安全和非线程安全的集合对象

    转载自  Java多线程:线程安全和非线程安全的集合对象 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到 ...

  4. PHP - 版本选择 - 线程安全与非线程安全 - 学习/实践

    1.应用场景 主要用于弄清楚为什么会有线程安全与非线程安全的不同语言版本,以及这种情况是不是一直存在, 是否有解决统一的办法吗- 2.学习/操作 1.文档阅读 PHP For Windows: Bin ...

  5. java.lang包—StringBuffer类和StringBuilder类

    目录 一.数据结构 二.线程安全性分析 三.源码 四.适用场景 一.数据结构 在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串.String 类是不可变类,即一旦一 ...

  6. 【java的socket编程】结合多线程Thread实现通信(使用线程池和非线程池对比)、java开发UDP/IP网络程序

    结合多线程实现socket 使用非线程池(拓展Thread) 使用线程池(Executor pool) 使用DatagramPacket DatagramSocket开发UDP/IP程序 使用UDP获 ...

  7. PHP线程安全和非线程安全的区别

    Windows版的PHP从版本5.2.1开始有Thread Safe.这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍. 从2000年10月20日发布的第一个Windows版的PHP3.0.1 ...

  8. php+linux+线程安全,PHP 线程安全与非线程安全版本的区别深入解析

    从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方 ...

  9. php mysql 线程安全_PHP 线程安全与非线程安全版本的区别深入解析

    从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方 ...

最新文章

  1. 神经网络基础知识梳理
  2. 第八届国际BCI会议(2021 Virtual BCI meeting)
  3. 最小代价生成树Prim/Kruskal(c/c++)
  4. 什么是Java Marker Interface(标记接口)
  5. P2150-[NOI2015]寿司晚宴【dp】
  6. Linux——CentOS建立一个最高权限的用户
  7. 数据库生成数据字典工具(PDMREAD)图解
  8. 了解了广告行业利益相关方,横扫一切商业模式
  9. QQ连连看外挂核心算法(检测两点能否连通)
  10. Charles+Chrome+https,提示隐私设置错误,您的连接不是私密连接
  11. 算法分析之常用符号大O、小o、大Ω符号、大Θ符号、w符号
  12. 红芯宣布获得2.5亿元C轮系列融资,要做1亿人的安全工作入口
  13. 软件测试怎么学?如何系统学习软件测试?
  14. Unity_触摸屏_实现360序列帧
  15. Photoshop touch教程全攻略
  16. 马克思与他的脑机接口
  17. mall4j的小程序商城(java)
  18. 验证码总是错误问题的总结
  19. Niagara_Advanced内容示例 1.2 Advect Grid 2D Collection
  20. oracle函数自定义日历周获取周数

热门文章

  1. WIN8.1 PRO RTM VOL.2013.09.18
  2. 在Linux中同时删除一百万个小文件的最快方法
  3. IPSec ***和SSL ***两种***的安全风险比较
  4. WakaTime数据同步展示工具
  5. 索引初识一 MySql
  6. 学习linux决心书
  7. doxygen可以生成C/C++代码的文档(根据注释)
  8. UI设计实战篇——利用Bootstrap框架制作查询页面的界面
  9. Java对象的内存模型
  10. 数据绑定设计器的使用