멀티스레드 동기화 관련되어 질문있습니다.

조회수 1525회

TCP/IP 공부하며 채팅 프로그램을 자바로 만드는 중인데요 예제들 중에 Vector란 자료구조 클래스를 보았고 Vector에 대해서 조사해보니 멀티스레드 환경에서 동기화를 보장 해준다 이렇게 나오던데

동기화란게 한 자원을 동시에 사용하지 못하게 하기 위함 이라고 알고 있습니다.

채팅을 예로 들자면 클라이언트들이 메세지를 TCP서버에 전달할때 TCP서버는 그 메세지라는 데이터를 저장하고 클라이언트들에게 다시 전송해야 하는데 동시에 메세지를 전달받을 경우에만 동기화를 하겠구나 라고 지금 이해하고 있지만

Vector말고도 멀티스레드에서 동기화 보장되는 클래스를 찾아보니 HashTable ,String Buffer란 것도 동기화가 보장된다는데

제가 궁금한건 어떤 구조,어떤 부분때문에 Vector,HashTable,String Buffer가 동기화가 된다는건지 궁금해서 질문드립니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 좋은 질문입니다. 멀티쓰레드에서 동기화는 아주 중요한 개념이고 올바르게 처리하기 어려운 부분이기도 합니다.

    다행히 자바는 synchronized 구분이 문법적으로 지원이 되어 다른 환경에 비해 다루기 편한편입니다.

    즉 Vector, Hashtable 등은 내부적으로 synchronized 처리가 되어있기에 동기화 처리가 가능합니다.

    다만 동기화가 된다는 의미는 시리얼하게 처리된다는 의미이므로 성능 저하가 발생하게 됩니다;

    • 글세요...그런 부분은 실제로 벤치마킹을 해봐야 알 수 있을 듯 합니다. 다만 락을 작게 설정할수록 그만큼 성능에 이득이 있습니다. 정영훈 2017.4.21 15:21

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)