2013년 1월 21일 월요일

[Java] 동기화

동기화라는 것은 단순히 말해 하나의 스레드가 critical section을 실행하고 있을 때 다른 스레드의 접근을 막는 것이라 할 수 있다.

동기화 방법
1. 동기화 블록 지정

synchronized(sharedArea){
            실행문(critical section)
}
이와 같이 critical section을 동기화 블록으로 처리해 주고 sharedArea라는 공유 객체를 설정해 둠으로써 이 블록 뿐만 아니라 다른 지역 블록에서 이 공유 객체가 되어 있는 부분을 다 접근하지 못하게 막아 두는 것이다.

2. 동기화 메소드
synchronized void increaseNum(int num){
           실행문(critical section)
}
메소드 자체에 동기화를 걸어 두어 동시에 스레드가 이 메소드를 접근하는 것을 차단하는 것이다.

동기화와 관련된 메소드
obj.wait();
다른 스레드로부터 신호가 오기를 기다린다.(얼음)

obj.notify();
다른 스레드로 신호를 보낸다.(땡!)

여기서 obj는 두 스레드가 공유하는 객체여야 한다는 점과 반드시 동기화 블록이나 동기화 메소드 내에 두어야 한다는 점에 유념하자.

댓글 없음:

댓글 쓰기