验证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的一个简易替换,用在字符串缓冲区被单个线程使用的时候
(这种情况很普遍)。 
在大部分情况下,StringBuilder > 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));
    }

猜你喜欢

转载自www.cnblogs.com/ljj5/p/9470593.html
今日推荐