• 카테고리

    질문 & 답변
  • 세부 분야

    기타 (개발 · 프로그래밍)

  • 해결 여부

    미해결

예시로 보여주신 StringBuffer의 synchronized 키워드의 성능과 관련해 여쭤보고 싶습니다.

22.07.14 11:19 작성 조회수 305

1

안녕하세요! 강의 정말 잘 듣고 있습니다.

예시로 잠시 언지해주신 StringBuffer의 성능 면에서 궁금한 점이 있어 질의 드립니다.

 

StringBuffer도 StringBuilder 처럼 builder의 형태인데 synchronized 키워드가 붙어 동기화를 지원 한다고 말씀주셨습니다.

 

synchronized 키워드가 메소드 단위로 붙으면 해당 메소드 단위로 lock이 걸린다고 싱글톤에서 배웠는데요.

 

그런데 스레드 마다 빌더를 생성한다고 하셨으니,

스레드들은 별개의 빌더 인스턴스를 사용하다고 하면

동기화로 인한 lock도 빌더 인스턴스 별로 걸릴 테니 

사용자 요청이 물려서 의도하지 않은 데이터가 생길 가능성도 적지 않나요??

왜 StringBuffer 에서 sync 키워드를 사용하는지 여쭤봐도 괜찮을까요??

 

또한 각 인스턴스 별로 lock이 걸릴테니 사용자가 몰리는 것과 상관이 없어서 성능에 크게 영향이 가지 않을 것이라고 생각이 되는데 이게 맞을까요??

 

답변 1

답변을 작성해보세요.

1

안녕하세요.

StringBuffer는 여러 스레드가 공유해서 사용해서 안전하도록 synchronized 키워드를 사용해서 모든 오퍼레이션을 오직 한번에 한 스레드만 사용하도록 자바를 만든 개발자들이 만들어 놓은 클래스입니다.

그런데 말씀하신대로 이런 StringBuffer나  StringBuilder를 쓰레드 마다 따로 만들어서 사용한다면 사실상 StringBuffer를 쓸 이유는 없어집니다. 쓰레드 안정성을 확보할 필요가 없으니까요.

lock이 걸리지 않는것을 떠나서 내부 synchronized 키워드가 사용된 메서드를 사용하는 중에 lock을 가져오고 반환하는 로직이 사용될테니 큰 성능 부하는 아니겠지만 불필요한 연산은 수행이 됩니다.

감사합니다.

qpal1zm23님의 프로필

qpal1zm23

질문자

2022.07.19

많은 도움이 되었습니다! 감사합니다!