ほげにっき

hogedigoの日記

StringBuilderとStringBuffer

こんなこと言われた。

マルチスレッドでアクセスされる箇所はStringBuffer、シングルスレッドアクセスが保証されているなら高速なStringBuilderを使いましょう。

まあ、概ね正しいけど・・。ケースによってはStringを使用するという選択肢もあるデスよ。

↓こんなカンジかな。

public class Test {
	private volatile String value;
	
	public String get() {
		return this.value;
	}
	
	public synchronized void append(String toAppend) {
		this.value += toAppend;
	}
}

使えるのは読み出し(get)に対して書き込み(append)の頻度が少ないケース。書き込みのコストは若干高いけど、読み出しはStringBuffer、StringBuiderに比べて最速デス。さらに、書き込みと読み出しがお互いの処理をブロックしません。


書き込みの排他が必要デス。