프로그래밍 공부
카테고리
작성일
2022. 8. 13. 14:31
작성자
WDmil
728x90

임계영역

- 동시의 여러 개의 쓰레드가 특정 소스코드 혹은 메서드를 동시에 접근 할 경우 해당 메서드를 서로 사용하려고 하는데 이처럼 여러 개의 쓰레드가 동시에 접근 할 수 있는 코드 영역 혹은 메서드를 임계 영역이라고 부른다.

- 프로그램에서 임계 역역이 있을 경우 프로그램 전체의 심각한 오류를 발생 시킬 수도 있다.

- 자바에서는 동기화를 통해 이러한 부분을 해결할 수 있다.

 

동기화

- 동기화를 하게 되면 임계영역 떄문에 발생되는 문제를 막아 줄 수있다.

- 동기화를 하게 되면 쓰레드가 접근하는 순서대로 코드를 처리하고 늦게 도착하는 쓰레드는 기다렸다가 먼저 도착한 쓰레드의 작업이 완료가 되면 다음 쓰레드가 작업을 하게 된다.

- 동기화는 메서드를 동기화 하는 방법과 코드의 일부분을 동기화 하는 방법으로 나눠진다.

 

메서드의 동기화

- 여러개의 쓰레드가 호출하는 메서드가 있다고 한다면 메서드이 코드는 임계영역에 해당한다.

- 이런 경우에는 메서드 전체를 동기화 하면 되는데 다음과 같이 작성해 주면된다.

 public synchronized void method() {

 

}

synchronized를 통해 t1이 먼저 실행되고 t2가 실행되는 것을 볼 수 있다.

t1이 먼저 도착한 후에 t2가 실행된다.

 

코드의 동기화

-Run 메서드의 코드 일부분을 동기화 하고자 할 떄는 임계 영역에 해당하는 코드 부분을 synchronized 블록으로 묶어 주면 된다.

synchronized(클래스 혹은 객체) {

    임계영역 코드

}

코드 단위로 묶어서 실행 할 수도 있다.

synchronized를 통해 오류를 방지할 수 있다.

728x90

'JAVA' 카테고리의 다른 글

JAVA Wrapper  (0) 2022.08.13
JAVA 예외처리  (0) 2022.08.13
JAVA 쓰레드 우선순위  (0) 2022.08.13
JAVA 쓰레드  (0) 2022.08.13
JAVA 인터페이스  (0) 2022.08.13