Categories: Java 언어Korean

Java 총 정리[93. 쓰레드 동기화]

쓰레드 동기화

이전 걸음에서 계속 쓰레드에 대해서 공부를 하고 있습니다. 쓰레드는 상당히 중요한 개념이기 때문에 몇 걸음 더 진행이 될 예정입니다. 끝까지 이 글들을 읽고 공부를 하신다면 쓰레드에 대해서 충분히 잘 이해를 하실 수 있다고 생각합니다.

쓰레드 동기화에 대해서 이번 걸음에서는 쓰레드 동기화가 무엇 인지 왜 필요성에 대해서 알아보고 간단하게 동기화를 하는 방법을 추가적으로 설명을 드릴 예정입니다. 이후 걸음에서 쓰레드 동기화를 사용을 하는 방법을 자세히 알아 보도록 하겠습니다.

쓰레드 동기화란? 쓰레드 동기화 방법과 같은 내용을 이번 걸음에서 같이 공부를 하도록 하겠습니다. 기본적인 내용을 이해는 내용들이기 때문에 이해를 위주로 공부를 하시면 좋을 것 같습니다.

쓰레드 동기화 란?

위의 사진을 보면 남자 화장실 여자 화장실을 볼 수 있다. 화장실을 이용을 하려는 사람이 많다면 안에 있는 사람이 나와야 화장실에 들어갈 수 있게 되어 있는 것이 우리들이 알고 있는 기본적인 상식이다. 

그럼 여기서 사람을 쓰레드로 생각을 하시고 보시면 쓰레드 동기화에 중요성을 알 수 있습니다. 쓰레드는 각자 스스로 기능으로 동작을 합니다. 이 상황에서 어떤 자원을 같이 써야 하는 상황이 생긴다면 동시에 사용을 하면서 프로그램에서 원하지 않는 결과가 발생을 할 수 있습니다. 이 부분을 규칙을 정하고 순서를 지키게 하는 것을 쓰레드 동기화라고 합니다.

위의 그림처럼 쓰레드 동기화를 신경을 쓰지 않고 자원을 접근을 하게 되면 값을 증가를 시켜주는 쓰레드가 있고 값을 감소 시켜주는 쓰레드가 있는 경우 기본적으로 생각을 한 내용이 5에서 1이 증가 되고 6이 되고 그 이후에 감소 쓰레드로 인해 5가 될 것 이라고 생각하지만 위의 그림을 보면 감소 쓰레드가 6일 때 호출이 되는 것이 아니라 동시에 접근을 함으로 써 5의 값을 가지고 동작이 되면서 결국 4가 되는 상황이 발생이 될 수 있습니다.

그래서 필요 시 쓰레드 동기화를 해줘서 자원 접근을 일관 되도록 해주는 것이 중요합니다.

쓰레드 동기화 방법

쓰레드를 동기화를 하는 방법에는 일반적으로 잠금(Locking)과 조건 변수(Condition Variables)를 통해 이루어 집니다. Java에서는 임계영역을 두어서 쓰레드의 동기화를 진행을 합니다. 

Java에 임계영역 같은 경우에는 잠금과 열어서 사용을 할 수 있게 해주는 것을 영역만 정해주면 알아서 해주게 됩니다. 임계영역은 다음 걸음에서 자세히 알아보도록 하겠습니다.

Dolphin

Recent Posts

Java 총정리[97. Java GUI]

Java GUI Java GUI에 대해서 이번 걸음에서 배움으로써 GUI에 전반적인 지식과 Java GUI를 구현하는 방법…

7개월 ago

Java 총정리[96. Java TCP 통신 프로그램 구현]

Java TCP 통신 프로그램 구현 Java TCP 통신 프로그램 구현을 위해서 이전 걸음에서 쓰레드에 대한…

7개월 ago

Java 총정리[95.쓰레드 통신]

쓰레드 통신 이전 걸음에서 쓰레드의 임계영역에 대해서 같이 공부를 했습니다. 동기화에 대한 개념을 계속적으로 하고…

7개월 ago

Java 총 정리[94. 쓰레드 임계영역]

쓰레드 임계영역 이전 걸음에서 쓰레드의 동기화에 대해서 같이 공부를 했습니다. 동기화에 대한 전반적인 내용을 공부하고…

8개월 ago

Java 총 정리[92. 쓰레드 join()]

쓰레드 join() 이전 걸음에서 쓰레드의 전반적인 실행 흐름에 대해서 공부를 했습니다. 이제 배운 실행 흐름…

8개월 ago

Java 총 정리[91. 쓰레드 실행 흐름]

쓰레드 실행 흐름 이전 걸음에서 쓰레드에 기본적인 내용을 공부를 했습니다. 쓰레드는 사용을 하는 것이 상당히…

9개월 ago

This website uses cookies.