String ,StringBuffer ,StringBuilder 實例說明性能和線程安全性

   總結:

       String               不可變字符串操作(操作較多 比較耗時)

       StringBuffer    操作可變字符串(是線程安全的,多線程使用高效並且效率高,單線程中相對StringBuilder稍微低一些)

       StringBuilder  操作可變字符串(線程不安全,單線程使用比較高效)

       測試操作String 操作字符串所用時間

public  static String testString(){

long start = System.currentTimeMillis();
String str = "";
for(int i = 0 ; i < 200000 ;i++){
str = str + "add";
}
long  end = System.currentTimeMillis();

System.out.println(end - start);
return str;
}

測試使用StringBuffer 操作字符串所用時間



public static String testStringBuffer(){
long start = System.currentTimeMillis();
String str = "";
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i< 200000 ; i++){
stringBuilder.append("add");
}
long end = System.currentTimeMillis();
str = stringBuilder.toString();
System.out.println(end -start);
return str;

}


      測試使用StringBuilder 操作字符串所用時間


public static String testStringBuilder(){
long start = System.currentTimeMillis();
StringBuilder stringBuilder = new StringBuilder();
String str = "";
for(int i = 0 ; i < 200000;i++ ){
stringBuilder.append("add");
}
str = stringBuilder.toString();
long end = System.currentTimeMillis();
System.out.println(end -start);
return str;


      測試StringBuffer 和  StringBuilder   的線程安全性


public static void testStringBuilderS(){
new MThread("love_").start();
new MThread("you_").start();
new MThread("make_").start();
new MThread("sure_").start();
new MThread("yes_").start();
new MThread("are_").start();
new MThread("ok_").start();
new MThread("no_").start();
}


static class MThread extends Thread{
private String str;


public MThread(String str) {
super();
this.str = str;
}


@Override
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//分別註釋運行代碼觀察
//    stringBuffer.append(str);
//    System.out.println(stringBuffer.toString());

stringBuilder.append(str);
System.out.println(stringBuilder.toString());
}

}
發佈了28 篇原創文章 · 獲贊 16 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章