본문 바로가기
부트캠프/백

11.15 Thread2

by 티코딩 2022. 11. 16.

ㅇ 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