代码验证java的StringBuffer是线程安全而StringBuilder是线程不安全的

来源:互联网 发布:剑网三dbm数据下载 编辑:程序博客网 时间:2024/05/21 14:41
package practice;    //通过反转字符串来验证StringBuffer是线程安全而StringBuilder是线程不安全的  public class Practice {      public static void main(String[] args) {          /*          * 声明个字符串s,用下划线和井号是因为两个比较好区分。 分别实例化sf和sd两个对象          */          String s = "####____";          StringBuffer sf = new StringBuffer(s);          StringBuilder sd = new StringBuilder(s);          /*          * 对sf和sd各自实例化两个反转他们的类          */          ThreadReverseString sfr1 = new ThreadReverseString(sf);          ThreadReverseString sfr2 = new ThreadReverseString(sf);          ThreadReverseString sdr1 = new ThreadReverseString(sd);          ThreadReverseString sdr2 = new ThreadReverseString(sd);          /*          * 启动这四个线程,此时sf和sd各自有两个线程在对他们进行字符串反转操作          */          new Thread(sfr1).start();          new Thread(sfr2).start();          new Thread(sdr1).start();          new Thread(sdr2).start();      }  }    class ThreadReverseString implements Runnable {      /*      * 这个类用来完成字符串的反转工作,使用了Runnable接口来实现多线程 times是用来表示循环多少次的      * 因为懒的再写一个变量所以用了一个Object类型的s,后面再转化      */      public Object s = null;      int times = 200;        /*      * 两个构造方法把s传进来      */      public ThreadReverseString(StringBuffer s) {          this.s = s;      }        public ThreadReverseString(StringBuilder s) {          this.s = s;      }        /*      * 复写run方法实现多线程 在我的电脑上大概循环200次可以看到效果了,也许换了电脑就得多试几次或者增加循环次数了      */      public void run() {          for (int i = 0; i <= times; i++) {              /*              * 似乎sleep一小段效果会好一些 奇奇怪怪的输出格式只是为了便于比较              */              try {                  Thread.sleep(1);              } catch (InterruptedException e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              }                if (s instanceof StringBuffer) {                  ((StringBuffer) s).reverse();                  System.out.println("BUFFER->" + s);              } else if (s instanceof StringBuilder) {                  ((StringBuilder) s).reverse();                  System.out.println("        " + s + "<-builder");              }          }      }  }  /*  * 最后看一下控制台的输出会发现反转后出现井号和下划线交错的都是StringBuilder的输出  */  

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑开机一直长鸣报警怎么办 国外电话卡网速太慢怎么办 滴滴提现忘记登录密码怎么办 微信提现支付密码忘记了怎么办 小米手机前置摄像头打不开怎么办 mp4视频屏幕好小怎么办 投了简历没回应怎么办 借壳上市原股票怎么办 红米note3指纹解锁失灵怎么办 来分期刷脸失败怎么办 买到假货商家不承认怎么办 买到假货翻新货工商局怎么办 三星note8笔丢了怎么办 夜跑结束后该怎么办 lol客户端正在运行中怎么办 瑞和宝终端锁定怎么办 骊爽摩托车动力弱怎么办? 换了手机跟点微信怎么办 手机送点插头换了怎么办 校园网总是显示有代理软件怎么办 电脑连接无线网络需要登录怎么办 智校园密码忘了怎么办 ivvi手机开不开机怎么办 跑鞋子大了一码怎么办 洗浴搓澡出汗多该怎么办 联华超市卡丢了怎么办 飞利浦电视的应用打不开怎么办 贵阳市下岗职工办理门面补贴怎么办 陌陌上被骗了色怎么办 七位数的座机要怎么办 开通米粉卡店铺预留电话号码怎么办 办信用卡没有单位电话怎么办 qq账号永久封停怎么办 qq号给冻结了怎么办 微信被官方封2天怎么办 天虹的卡丢了怎么办 顺丰快递到不了的地区怎么办 信用卡兑换东西超过积分怎么办 新买的冰箱坏了怎么办 买新洗衣机出现克坏怎么办 京东当日达没到达怎么办