코드 원숭이 :
왜 모두 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
를 처리하는 중간에.