• 验证String、StringBuffer、StringBuilder区别


    1、线程安全概念

    线程安全指的是多个线程并发执行的时候,当一个线程访问该类的某个数据的时候,通过加锁的机制,保护数据,

    直至当前线程读取完,释放锁后,其他线程才能继续使用,我们认为这样是线程安全的。

    2、验证String、StringBuffer、StringBuilder区别

    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数
    据这个String类提供了数值不可改变字符串而这个StringBuffer类提供的字符串进行修改当你知道字
    符数据要改变的时候你就可以使用StringBuffer典型地,你可以使用StringBuffers来动态构造字符数据 

    String 类型和StringBuffer的主要性能区别:String是不可变的对象,因此在每次对String类型进行改变
    的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的
    字符串最好不要用String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多
    了以后, JVM 的 GC 就会开始工作,性能就会降低。 

    StringBuilder是一个可变的字符序列,是JDK5.0新增的。此类提供一个与StringBuffer兼容的API,但不
    保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候
    (这种情况很普遍)。 

    例如:

    public static void main(String[] args) {
           String();
           StringBuffer();
           StringBuilder();
        }
        private static void String(){
            long start=System.currentTimeMillis();
            String str="a";
            for (int i = 0; i < 10000; i++) {
                str+=i;
            }
            long stop=System.currentTimeMillis();
            System.out.println("String time:"+(stop-start));
        }
        private static void StringBuffer(){
            long start=System.currentTimeMillis();
            StringBuffer str=new StringBuffer("a");
            for (int i = 0; i < 10000; i++) {
                str.append(i);
            }
            long stop=System.currentTimeMillis();
            System.out.println("StringBuffer time:"+(stop-start));
        }
        private static void StringBuilder(){
            long start=System.currentTimeMillis();
            StringBuilder str=new StringBuilder("a");
            for (int i = 0; i < 10000; i++) {
                str.append(i);
            }
            long stop=System.currentTimeMillis();
            System.out.println("StringBuilder time:"+(stop-start));
        }

     结果:

    此方法要在数值比较大的时候才好验证。

    在大部分情况下,StringBuilder > StringBuffer。这主要是由于前者不需要考虑线程安全。

    例如:

    public static void main(String[] args) {
            long a=100000;
            {
                List<Thread>li=new ArrayList<Thread>();
                StringBuffer sb=new StringBuffer("a");
                for (int i = 0; i < a; i++) {
                    Thread tr=new Thread(){
                        @Override
                        public void run() {
                            sb.append(".");
                        }
                    };
                    tr.start();
                    li.add(tr);
                }
                for (Thread item:li) {
                    try {
                        item.join();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("lengthOne="+sb.length());
            }
            //===================================
            {
                List<Thread>li=new ArrayList<Thread>();
                StringBuilder sb=new StringBuilder("a");
                for (int i = 0; i < a; i++) {
                    Thread tr=new Thread(){
                        @Override
                        public void run() {
                            sb.append(".");
                        }
                    };
                    tr.start();
                    li.add(tr);
                }
                for (Thread item:li) {
                    try {
                        item.join();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("lengthTne="+ sb.length());
            }
        }

    结果:

  • 相关阅读:
    关于并发量的简单计算公式
    kbmmw中向服务器端传递对象的一种简单方式
    tms web core 里面调用pascal 过程。
    tms web core 通过URL 传递参数
    tms web core 与 kbmmw 第一次亲密接触
    kbmmw 的HTTPSmartService 上传文件到服务器端
    kbmmw 中的进程管理小工具
    kbmmw 5.06.20 发布
    kbmmw ORM 对象定义语法简析
    kbmmw 5.06.00 beta 发布
  • 原文地址:https://www.cnblogs.com/ljj5/p/9470593.html
Copyright © 2020-2023  润新知