ㅇ Thread 동기화
멀티 스레드 프로세스의 경우 두 스레드가 동일한 데이터를 공유하게 되어 문제 발생가능함.
두 스레드간에 객체가 공유되기 때문에 발생하는 오류를 발생하지 않게 하는 것이 스레드 동기화.
ㅇ 임계영역&락
임계영역은 오직 하나의 스레드만 코드를 실행할 수 있는 코드 영역을 의미함.
락은 임계영역을 포함하고 있는 객체에 접근할 수 있는 권한
스레드A가 임계영역내의 코드를 실행할땐 다른 스레드들은 락이 없기때문에 A가 모두 실행하면 다른스레드가
락을 획득하여 코드를 실행할 수 있다.
ㅇ 동기화 하는 방법
1. 메서드 전체를 임계 영역으로 지정하기
메서드의 반환 타입 좌측에 synchronized 키워드를 작성해 지정가능.
public synchronized boolean withdraw(int money){}
2. 특정한 영역을 임계 영역으로 지정하기
synchronized 와 소괄호안에 해당영역이 포함된 객체의 참조 넣고, 중괄호로 블럭열고 블럭내에 코드 작성하면됨.
public boolean withdraw(int money){
synchronized (this){
if(balance >= money){
...
}
}
}
'부트캠프 > 백' 카테고리의 다른 글
11.18 JSON(미완성) (0) | 2022.11.19 |
---|---|
11.17 재귀 (0) | 2022.11.18 |
11.15 스레드1, JVM (0) | 2022.11.16 |
11.14 Annotation, Lambda, Stream (0) | 2022.11.14 |
11.11 컬렉션 연습문제 (0) | 2022.11.14 |