728x90
반응형
Lock
멀티스레드, 동시성 프로그래밍에서 가장 중요한 개념은 Thread와 Lock입니다.
- 하나의 자원에 대해 여러 Thread가 동시에 접근하는 것을 도와주는 도구입니다.
- Synchronized, 동기화하거나, 아니면 접근 자체를 직렬화한다고 표현합니다.
- 멀티스레드 환경에서 여러 Thread가 Heap 메모리에 있는 객체나 자원을 접근할 때 동기화를 통해 접근을 통제해야 합니다.
- Lock을 통해서 공유 자원을 한 Thread만 접근할 수 있도록 통제할 수 있습니다.
Lock 기능
- 특정 조건에 다라 지정한 수의 Thread만 자원에 접근하게 할 수 있습니다.
- 접근을 못한 Thread들은 줄을 세워, 대기하게 하고 들어갈 수 있을 때 다시 동작하게 할 수 있습니다.
→ 대기 상태의 Thread는 Sleep 상태라고 하며, 다시 동작하게 하는 것은 notify() 를 통해서 합니다.
Lock 종류
암묵적 Lock : synchronized
- 블럭이나 메서드 단위로 synchronized로 감싸서 Lock을 겁니다.
- 어느 부분이 Lock 상태인지 명확하지 않아서 암묵적인 Lock이라고 합니다.
- Thread 간의 Lock을 획득하는 순서를 보장해주지 않습니다. (unFair)
- 1개의 Thread만 공유 자원에 접근할 수 있습니다.
명시적 Lock : ReentrantLock
- 다중 스레드가 공유하는 주요 컬렉션 대신 완전히 독립적인 Lock을 채택하여 구현하는 Lock 입니다.
- Thread 간의 Lock을 획득하는 순서를 보장할 수도 있고, 보장하지 않을 수도 있습니다. (Fair, unFair)
- Lock을 획득하려는 스레드의 개수가 4개 이상일 때 사용하면 좋습니다.
- 여러개의 Thread가 공유 자원에 접근할 수 있습니다.
ReentrantLock Code
private ResponseWrapper Function(Command command){
this.lock.lock();
//Logic();
try {
//Logic();
} catch (Exception e) {
//Logic();
} finally {
this.lock.unlock();
}
}
위에 코드와 같이 필요한 부분에 Lock을 걸어주어 공유자원에 대해 스레드 접근을 통제할 수 있습니다.
[참고]
728x90
반응형
'JAVA' 카테고리의 다른 글
[Java] 리스트를 만드는 방법 3가지 (ArrayList, Arrays, List) (0) | 2022.12.02 |
---|---|
[Java] Mutable & Immutable (2) | 2022.11.23 |
[Java] 자바 메모리 영역 관련 노트 정리 (0) | 2022.10.24 |
[Java] Thread Local (0) | 2022.10.24 |
[Java] Collection - Map (0) | 2022.09.19 |