프로덕션 웹 응용 프로그램에서 동료 프로그래머는 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는 서로를 방해하지 않습니다.