首页 > 编程语言 > 详细

多个线程操作StringBuffer和StringBuilder

时间:2015-10-02 22:29:58      阅读:247      评论:0      收藏:0      [点我收藏+]

StringBuffer是线程安全的,StringBuilder是线程不安全的

先上代码

 1 public class Main {
 2     StringBuffer sbuffer = new StringBuffer();
 3     StringBuilder sbuilder = new StringBuilder();
 4     
 5     public static void main(String[] args) {
 6         Main main = new Main();
 7         Thread1 t1 = main.new Thread1();
 8         new Thread(t1).start();  
 9         new Thread(t1).start();
10         new Thread(t1).start();
11         try {
12             Thread.sleep(3000);
13         } catch (InterruptedException e) {
14             e.printStackTrace();
15         }
16         System.out.println(main.sbuffer.toString());
17         System.out.println("buffer长度" + main.sbuffer.length());
18         System.out.println(main.sbuilder.toString());
19         System.out.println("builder长度"+main.sbuilder.length());
20     }
21     
22     class Thread1 implements Runnable{
23         
24         public void run(){
25             for(int i=0; i<500; i++){
26                 sbuffer.append(""+i%10);
27                 //下面是同步块,加上同步块之后上面的StringBuffer输出和StringBuilder输出是一样的
28 //                synchronized (sbuilder) {            
29                     sbuilder.append(""+i%10);
30 //                }
31             }
32         }
33     }
34 }

 

我开了三个线程执行,再sleep 3秒钟,应该3个线程都执行完了,再输出两个结果

结果如下

技术分享

多试几次,每次结果不一样,偶尔builder也会是1500个长度,大部分长度小于1500,还有多个 口

把代码中同步的注释去掉,两个结果就一样了

 

多个线程操作StringBuffer和StringBuilder

原文:http://www.cnblogs.com/zlzlzl/p/4852784.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!