티스토리 뷰
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();
}
'Java' 카테고리의 다른 글
[Java] HttpURLConnection timeout 설정 (0) | 2020.10.29 |
---|---|
[Java] 스레드 풀 (0) | 2020.09.09 |
[Java] Converting MultipartFile to File (0) | 2020.09.09 |
{Java] Java 4에서 HmacSHA256 알고리즘 사용 (0) | 2020.09.09 |
[Java] Java1.4 와 1.5 차이점 (0) | 2020.09.09 |