StringBuffer和StringBuider的线程安全测试。
2017-06-07 10:16
429 查看
我们知道StringBuffer是线程安全,而StringBuider则不是,在多线程的情况下。同样的条件可能导致得出的结果不同。
下面是测试代码:
这段代码是模拟1000个线程,然后用StringBuffer和StringBuider添加字符串,测试将结果是StringBuffer添加的字符串
长度为1000,而StringBuider不是。原因是因为StringBuilder是非线程安全的,这就导致原本已经添加的字符串可能被后一个线程所替换。而源码当中StringBuffer的append方法是有synchronized关键字的,这就起到了排队效果,前一个线程添加完后,释放锁了,后一个线程才能添加。
下面是测试代码:
package com.cbf4life; import java.util.ArrayList; import java.util.List; /** * Created by Maggie on 2017/6/6. */ public class StringBufferTest { StringBuilder sb=new StringBuilder(); StringBuffer sb1=new StringBuffer(); public StringBufferTest() { ThreadGroup group = new ThreadGroup("testGroup"); MyThread at=new MyThread(); for(int i=0;i<1000;i++){ Thread th=new Thread(group,at,String.valueOf(i)); th.start(); } while (group.activeCount() > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println(sb.length()); System.out.println(sb1.length()); } public static void main(String[] args) { new StringBufferTest(); } class MyThread implements Runnable { public void run() { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } sb.append("1"); sb1.append("1"); } } }
这段代码是模拟1000个线程,然后用StringBuffer和StringBuider添加字符串,测试将结果是StringBuffer添加的字符串
长度为1000,而StringBuider不是。原因是因为StringBuilder是非线程安全的,这就导致原本已经添加的字符串可能被后一个线程所替换。而源码当中StringBuffer的append方法是有synchronized关键字的,这就起到了排队效果,前一个线程添加完后,释放锁了,后一个线程才能添加。
相关文章推荐
- StringBuffer,StringBuilder,ArrayList,Vector线程安全验证程序
- 根据StringBuffer、StringBuilder想起的的线程安全与线程不安全
- 怎么理解Stringbuffer是线程安全的stringbuilder是线程不安全的
- 字符拼接StringBuilder速度快,但StringBuilder是线程不安全的。(StringBuffer是线程安全的,给buffer加锁)
- Java中线程安全与线程非安全ArrayList,Vector 和 HashMap,Hashtable 和StringBuffer,StringBuilder
- 证明StringBuffer线程安全,StringBuilder线程不安全
- String,StringBuffer与StringBuilder的区别|线程安全与线程不安全
- 代码验证java的StringBuffer是线程安全而StringBuilder是线程不安全的
- 怎么理解StringBuffer线程安全,StringBuilder线程不安全
- String,StringBuffer与StringBuilder的区别|线程安全与线程不安全
- StringBuffer线程安全StringBuilder线程不安全
- Stringbuffer的线程安全是怎么实现的
- ArrayList线程不安全测试
- 线程的安全删除
- Java线程安全精解
- servlet的实例变量是线程不安全的,而其JSP也默认是以多线程方式执行(原创)
- BCB中的线程安全的消息队列(很经典)
- 创建安全的线程
- 测试杀毒软件是否有效的最简单和安全的方法
- 基于块的协议分析方法在安全测试中的优点--spike