5月 11th, 2008at 1:13
Tags: Java
J2SE1.5 StringBuilder
同期のStringBufferと非同期のStringBuilder。Javadocには以下のようにかかれている。
StringBuilderのインスタンスは、複数のスレッドで使用するには安全ではありません。
このような同期が必要な場合は、StringBufferを使用することをお勧めします。
synchronizedとするとStringBufferは安全な分遅い。ほとんどの場合、スレッドセーフでなくてもいいと思うので、StringBuilderを使うといい。
単一スレッドならStringBuilder複数スレッドならStringBuffer
ちなみに5.0では「str + str」という式をjavacがStringBuilderを使った実装に修正してくれるので、文字連結が楽になる。
使用例
package com.daipresents.test.tiger;
import com.daipresents.test.SpeedCheck;
/** * StringBuilder.java。<pre> * </pre> */public class StringBuilderSpeed {
public static void main(String[] args) {
// StringBufferの場合 long start = SpeedCheck.getNowMillisecond();
StringBuffer buff = new StringBuffer(8);
for(int i = 0; i < 100000; i++){ buff.append("1234567890"); }
long end = SpeedCheck.getNowMillisecond();
SpeedCheck.printPassMillisecond(start, end);
// StringBuilderの場合 start = SpeedCheck.getNowMillisecond();
StringBuilder buil = new StringBuilder();
for(int i = 0; i < 100000; i++){ buil.append("1234567890"); }
end = SpeedCheck.getNowMillisecond();
SpeedCheck.printPassMillisecond(start, end);
}}
実行結果
millsecond = 109 << StringBuffermillsecond = 94 << StringBuilder




