왜 모두 StringBuilder와 생성자는 매개 변수 StringBuffer를 사용하여 동기화 블록 클래스 문자열 생성자 메서드하지 않습니다 않는 동안?

코드 원숭이 :

왜 모두 StringBuilder와 생성자는 매개 변수 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()하는 수정 후 상태입니다.

문자열 생성자에 모두 전화를 동기화하면 수정하는 다른 스레드를 방지 buffer를 처리하는 중간에.

추천

출처http://43.154.161.224:23101/article/api/json?id=4052&siteId=1