JAVA String StringBuilder StringBuffer 速度 线程安全性验证

@[TOC]String StringBuilder StringBuffer 速度 线程安全性验证

速度验证

	时间 花费String+> String concat> StringBuilder~StringBuffer

源代码

	public static String getStringRendom(int length)
    {
        return RandomStringUtils.randomAlphanumeric(length);
    }
    public static void main(String[] args) throws InterruptedException {
        String s = "";
        StringBuilder sb = new StringBuilder();
        StringBuffer sbf = new StringBuffer();

        Random r = new Random();
        LinkedList<String> src=new LinkedList<String>();
        //随机产生100000个字符串
        for(int i=0;i<=100000;i++)
        {
            src.add(getStringRendom(r.nextInt(10)));
        }
        long st1=System.currentTimeMillis();
        //验证+拼接速度
        for(String st:src)
        {
            s=s+st;
        }

        long st2=System.currentTimeMillis();
        System.out.println("String+:"+(st2-st1));
        s="";
        //验证concat 速度
        for(String st:src)
        {
            s=s.concat(st);
        }
        long st3=System.currentTimeMillis();
        System.out.println("Stringconcat:"+(st3-st2));
        //验证StringBuilder速度
        for(String st:src)
        {
            sb.append(st);
        }
        long st4=System.currentTimeMillis();
        System.out.println("StringBuilder:"+(st4-st3));
        //验证StringBuffer速度
        for(String st:src)
        {
            sbf.append(st);
        }
        long st5=System.currentTimeMillis();
        System.out.println("StringBuffer:"+(st5-st4));
}

结果

String+:11406
Stringconcat:6051
StringBuilder:8
StringBuffer:7

线程安全验证

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

源代码


    public static void main(String[] args) throws InterruptedException {
             long startTime = System.currentTimeMillis();
        String strToReverse = "AAAABBBB";
        StringBuffer stringBuffer = new StringBuffer(strToReverse);
        StringBuilder stringBuilder = new StringBuilder(strToReverse);
        //每个方法启动10000个线程,验证线程安全
        for(int i=0; i<10000; i++) {
           new StringBuilderTaskThread(stringBuilder).start();
           new StringBufferTaskThread(stringBuffer).start();
        }

        try {
            //等待所有线程结束
            Thread.sleep(30000);
            //输出 验证结果
            System.out.println("StringBuffer toString: " + stringBuffer.toString());
            System.out.println("StringBuilder toString: " + stringBuilder.toString());
            long endTime = System.currentTimeMillis();
            System.out.println("Running time: " + (endTime-startTime));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
class StringBufferTaskThread extends Thread {

    private StringBuffer s = null;

    public StringBufferTaskThread(StringBuffer stringBuffer) {
        super();
        this.s = stringBuffer;
    }

    @Override
    public void run() {
        for(int i=0; i<10; i++) {
            try {
                Thread.sleep(200);
                s.reverse();
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}


class StringBuilderTaskThread extends Thread {

    private StringBuilder s = null;

    public StringBuilderTaskThread(StringBuilder stringBuilder) {
        super();
        this.s = stringBuilder;
    }

    @Override
    public void run() {
        for(int i=0; i<10; i++) {
            try {
                Thread.sleep(200);
                s.reverse();
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

结果

StringBuffer toString: AAAABBBB
StringBuilder toString: BABAABAB
Running time: 33056

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值