StringBuilderを持つコンストラクタがそうではないのはなぜStringクラスのコンストラクタメソッドは、パラメータのStringBufferの使用の同期ブロックでいますか?

コードモンキー:

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、それを処理の途中で。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=4053&siteId=1