프로덕션 웹 응용 프로그램에서 동료 프로그래머는 StringBuffer를 모든 곳에서 사용했습니다. 이제 응용 프로그램 개발 및 수정을 관리하고 있습니다. StringBuilder 와 StringBuffer를 읽은 후에 는 데이터 bean에 스레드 안전성이 필요하지 않기 때문에 모든 StringBuffer 코드를 StringBuilder로 대체하기로 결정했습니다.
예를 들면 : (각 데이터 bean에서 StringBuffer의 사용을 볼 수 있습니다)
@Override
public String toString() {
StringBuffer sb = new StringBuffer();// replace it from StringBuilder
sb.append(" ABCD : ").append(abcd);
sb.append(", EFGH : ").append(efgh);
sb.append(", IJKL : ").append(ijkl);
}
각 세션 / 요청에 대해 별도의 데이터 bean을 작성합니다. 세션은 다른 사용자가 액세스 할 수없는 단일 사용자가 사용합니다.
마이그레이션하기 전에 다른 사항을 고려해야합니까?
단일 스레드가있는 경우 (대기 스레드가 없거나 새 스레드가 객체 잠금을 찾지 않음) StringBuffer 또는 StringBuilder와 동일하게 수행됩니다. StringBuffer의 경우 객체 잠금을 수행하는 데 시간이 걸리지 만 객체 잠금의 보류 / 해제를 제외하고 성능 차이가 있는지 알고 싶습니다.
StringBuffer. 나는 그런 코드를 본 적이 없지만 멀티 스레딩 관점에서 나쁜 디자인이라고 확신합니다. StringBuffer인터페이스를 따라 스레드를 동기화 하는 것은 나쁜 생각이라고 생각하기 때문에이 클래스는 존재하지 않아야하며 항상 사용해야한다고 생각합니다 StringBuilder. 다른 사람들이 이미 언급했듯이 StringBuffer역사적 이유로 존재합니다.
sb예제와 같이 로컬 변수로 사용하면 스레드 안전성은 전혀 중요하지 않습니다. 수천 개의 스레드가 동시에 메소드에 들어간 경우에도 각각 고유 한 로컬 변수가있는 고유 한 호출 스택이 있습니다. StringBuilders는 서로를 방해하지 않습니다.