以前、Java: StringBuilder と StringBuffer の違いでソースを見ると両者の違いは synchronized メソッドであるかの違いだと書きました。
そこで、 StringBuilder の append() を実行するときに syncronized 文にした場合の実行速度は StringBuffer と同じなのか実験してみました。
Java:文字列結合の実行速度の比較 で使用したプログラムを改造して下の部分を追加しました。
(その他オプション最大値を変更しました)
StringBuilder sb = new StringBuilder();
for(int l=0; l<acount; l++) {
synchronized(sb) {
sb.append("0");
}
}
・実行環境
OS : Windows XP Pro SP3
CPU : Intel Core 2 Duo E8400
Java : JDK6u24
1,000,000回文字列を結合する処理を10回行う時間を測定しました。
それを10回行い平均です。
・結果 平均(合計)(単位は、ms)
StringBuffer | StringBuilder | StringBuilder (Syncronized) |
---|---|---|
510.9(5109) | 223.4(2234) | 509.9(5093) |
StringBuffer と synchronized した StringBuilder はほぼ変わらないという結果がでました。
予測通りの結果です。
2011/02/24:文章を若干修正