ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쓰레드의 동기화(synchronization)
    공부/Java 2024. 5. 13. 19:20

    쓰레드의 동기화(synchronization)

     

    - 멀티 쓰레드 프로세스에서는 다른 쓰레드의 작업에 영향을 미칠 수 있다.

    - 진행중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 '동기화'가 필요하다.

    쓰레드의 동기화 - 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것

     

    - 동기화하려면 간섭받지 않아야 하는 문장들을 '임계 영역'으로 설정한다.

    - 임계 영역은 락(lock)을 얻은 단 하나의 쓰레드만 출입 가능하다. (객체 1개에 락 1개)

     

     

    synchronized(키워드)를 이용한 동기화

    - synchronized로 임계영역(lock이 걸리는 영역) 설정하는 방법

    1. 메서드 전체를 임계 영역으로 지정하기
    public synchronized void calcSum() {
        // ....
    }

    2. 특정한 영역을 임계 영역으로  지정
    synchronized (객체의 참조변수) {
        // ....
    }

    1번은 반환타입 앞에 synchronized를 붙인다.

    이렇게 하면 메서드 전체가 임계영역(critical section)이 된다.

    임계 영역은 한 번에 한 쓰레드만 사용할 수 있기 때문에 영역을 최소화하는 것이 좋다

    ※ 임계 영역이 넓을 수록 효율이 떨어지니까

     

    2번이 더 한정적인 영역을 임계 영역으로 삼기 때문에 더 효율적이다.

    '공부 > Java' 카테고리의 다른 글

    람다식(Lambda Expression)  (0) 2024.05.16
    wait(), notify()  (0) 2024.05.14
    join(), yield()  (0) 2024.05.13
    suspend(), resume(), stop()  (0) 2024.05.12
    sleep(), interrupt()  (0) 2024.05.10
Designed by Tistory.