コードモンキー:
StringBuilderを持つコンストラクタがそうではないのはなぜStringクラスのコンストラクタメソッドは、パラメータのStringBufferの使用の同期ブロックでいますか?
public String(StringBuffer buffer) {
synchronized(buffer) {
this.value = Arrays.copyOf(buffer.getValue(), buffer.length());
}
}
public String(StringBuilder builder) {
this.value = Arrays.copyOf(builder.getValue(), builder.length());
}
Pshemo:
StringBuffer
スレッドセーフとマルチスレッドアプリケーションで使用できるように設計されています。
しかし、たとえそのデザインと、まだそのことは可能であろう呼び出しの間 buffer.getValue()
およびbuffer.length()
他のいくつかのスレッドが変更しようとする可能性がありbuffer
。この手段getValue()
その変更が、前の状態を反映するlength()
よう修正した後の状態。
Stringコンストラクタの両方の呼び出しを同期する変更から他のスレッドを防ぎbuffer
、それを処理の途中で。