4-4.(3) Thread 동기화 Lock
- Thread 동기화
: 여러개의 Thread가 공유하여 작업 진행 ->
: 문제가 발생할 여지가 있음 -> 임계 영역
: 이 영역을 동기화 처리 문제발생 방지
: 과도한 동기화는 프로그램 성능 저하 -> 필요한 영역만 선별적으로 사용
Lock을 이용한 동기화 처리
T17_LockAccountTest
1. lock 객체 생성
- 되도록이면 private final로 만든다
: 이유) 외부에서 접근하지 못하도록 상수로 만듦
: ReentranLock
private final ReentranLock lock = new ReentranLock();
2. lock() -> unlock()
- Lock 객체의 lock()메서드가 동기화 시작이고, unlock()메서드가 동기화 끝
- lock()메서드로 동기화를 설정한 곳에서는 반드시 unlock()메서드로 해제
public void deposite(int money) {
lock.lock(); // 동기화 시작
balance += money; // 동기화 처리 부분
lock.unlock(); //동기화 해제
}
3. lock을 통해서 동기화 가능
- lock.lock();
- try~catch 블럭을 사용할 경우
: unlock()메서드 호출은 finally 블럭에서 하도록 한다.
public boolean withdraw(int money) {
lock.lock(); //lock을 통해서 동기화 가능
boolean chk = false;
//try~catch 블럭을 사용할 경우에는
//unlock()메서드 호출은 finally블럭에서 하도록 한다.
try {
if(balance >= money) {
for(int i=1; i <= 1000000000; i++) {} // 시간 때우기
balance -= money;
System.out.println("메서드 안에서 = "+ getBalance());
chk = true;
}
}catch(Exception ex) {
chk = false;
}finally {
lock.unlock(); //잠금해제
}
return chk;
}
}
Author And Source
이 문제에 관하여(4-4.(3) Thread 동기화 Lock), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zhyun1220/4-42.-Thread-동기화-Lock저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)