Java
[Java] Java 동기화 (synchronized, lock) 에 관한 간단 정리
IT공부블로그
2020. 11. 27. 11:15
728x90
반응형
synchronized
메소드 앞에 synchronized를 붙이면 해당 메소드 자체가 lock이 걸리게 된다
공정성을 보장하지않아 기아 상태가 발생할수도 있다
동기화 종류
방법 |
설명 |
임계구역(critical section) |
공유 자원에 대해 단 하나의 스레드만 접근하도록 한다. (하나의 프로세스에 속한 스레드만 가능하다) |
뮤텍스(mutex) |
공유 자원에 대해 단 하나의 스레드만 접근하도록 한다. (서로 다른 프로세스에 속한 스레드도 가능) |
이벤트(event) |
특정한 사건의 발생을 다른 스레드에게 알린다. |
세마포어(Semaphore) |
한정된 개수의 자원을 여러 스레드가 사용하려고 할때 접근을 제한한다 |
대기 가능 타이머(waitable timer) |
특정 시간이 되면 대기중이던 스레드를 깨운다 |
* 기아상태
우선순위에 따라 먼저 처리될수가 있으며 우선순위에 밀려 계속 처리되지 못하는 상태
lock
synchronized 보다 정교한 동기화가 가능
공정성을 보장 가능
* java concurrent lock 종류
ReentrantLock : 재진입이 가능한 lock, 일반적인 베타 lock
RentrantReadWriteLock : 읽기에는 공유적이고, 쓰기에는 베타적인 lock
StampedLock : RentrantReadWirteLock에 낙관적인 lock 기능을 추가
* 사용예시
final Lock lock = new ReentantLock();
try{
this.lock.lock();
// 처리
}finally{
this.lock.unlock();
}
728x90
반응형