프로그래밍 정리/자바

멀티쓰레드와 문제점

주누다 2013. 6. 17. 14:32
반응형

쓰레드의 정의 : '쓰레드가 메서드가 동시에 실행되는 것'. 이 말은 동시에 메서드의 작업이 진행된다는 의미를 담고 있음.

여러개의 쓰레드가 동시에 작업을 진행할 때 가장 큰 문제로 제기되는 것은 바로 공유자원(Shared Resource)의 문제


- 쓰레드가 생성되더라도 메서드 내부에 존재하는 자료만을 사용한다면 별다른 문제가 없음. 즉, 공유자원 자체가 없는 것.

예를 들어 A, B, C라는 세사람이 화장실을 사용하려고 함. 각자의 방에 화장실이 하나씩 있다면 별다른 문제 없이 일을 볼 수 있음. 문제는 화장실이 하나밖에 없을 때 발생.

 공용화장실, 그것도 변기가 하나밖에 없는 화장실이라면 사용상의 문제가 발생. A가 일을 보고 있을 때 B와 C는 대기해야함.

만약 이것을 어기면 상상하기 힘든 문제가 발생. 이러한 문제를 해결하기 위해서 화장실의 문을 잠그는(Lock) 것.


- 이와 같은 문제는 쓰레드에서도 똑같이 발생. A, B, C를 쓰레드라고 할 때 하나의 공유자원을 세 개의 쓰레드가 동시에 이용한다는 가정하에, A가 공유자원을 사용하고 있을 때 B와 C는 대기해야함. 이 때 공유자원(일반적으로 메모리)에 락(Lock)을 거는 방법으로 하나의 쓰레드가 공유자원을 다 사용할 때까지 다른 쓰레드들을 대기시키는 것.


- 순서대로 공유자원을 사용하게끔 하는 기법을 동기환(Synchronization)라고 함. 즉 동기화를 순수한 우리말로 바꾸면 '줄서기'라고 말할 수 있음.


- 동기화의 정의

-> 줄서기(번갈아가면서 순서대로 공유자원 사용하기)

- 동기화의 기법

-> synchronized 블록(자원을 사용할 때 자원에 락(Lock)을 거는 방식)

-> wait()와 notify()

반응형

'프로그래밍 정리 > 자바' 카테고리의 다른 글

synchronized  (0) 2013.06.17
공유자원의 접근  (0) 2013.06.17
쓰레드 죽이기  (0) 2013.06.17
NotRunnable 상태 만들기  (0) 2013.06.17
쓰레드의 우선권  (0) 2013.06.17