study/java
17_java_쓰레드(Thread) 동기화
스파이크12
2022. 1. 21. 08:39
○ 임계영역(critical section)
다른 쓰레드가 동시에 끼어들어 사용하지 말아야하는 영역
○ intrinsic lock(monitor lock)
임계영역에 쓰레드가 사용 중일 때 다른 쓰레드가 접근하지 못하게 하는 잠금 장치
모든 객체 내부에 존재함
○ 기본적인 동기화
static Object lockIndex = new Object();
// lock으로 잠금을 해야하는 상황
synchronized (lockIndex) {
임계영역
}
○ 메소드 단위의 동기화
public synchronized void 함수명() {
Thread th = Thread.currentThread();
char ch = list[index];
try {
Thread.sleep(20);
} catch (InterruptedException e) {
System.err.println("자다깨서 쓰레드를 종료함");
return;
}
//synchronized (this) {
System.out.printf("%s[%d] : index:%d, char:%c\n",
th.getName(), th.getId(), index, list[index]);
index++;
//}
}
-> 메소드 단위로 임계영역을 지정하기 때문에 불필요한 부분까지 임계영역으로 잡혀 성능이 저하됨