멀티쓰레드와 쓰레드 동기화
멀티쓰레드 환경은 다수의 실행 흐름이 병렬적으로 작업을 처리할 수 있어서 속도와 효율성이 향상되는 장점이 있지만 공유 데이터에 동시에 접근이 일어나는 경우 예기치 못한 문제가 발생할 수 있다.
동기화(Synchronized)란
다수의 쓰레드가 하나의 공유 데이터에 접근하지 못하도록 잠금(Lock)을 하는 것이다.
동기화 처리를 하려면 메서드 선언부 또는 특정 코드 블럭{ } 앞에 synchronized 키워드를 추가한다.
public synchronized void m(){
...
}
synchronized(...){
...
}
이렇게 synchronized 키워드를 추가하여 동기화 처리를 할 수 있다.
쓰레드는 해당 동기화된 메서드 또는 코드블럭을 실행하기 전에 잠금을 요청하여 임계영역을 독점적으로 사용할 수 있다.
실행이 끝나면 잠금이 해제되고, 대기 중인 쓰레드들 중 하나가 다시 잠금을 요청하고 실행하게 된다.
무분별한 동기화는 성능 저하, 교착상태 등이 발생할 수 있으므로 적절하게 사용해야 한다.
'Java' 카테고리의 다른 글
[Java] 컬렉션 프레임워크(Collection Framework) (0) | 2022.08.03 |
---|---|
[Java] .equals("")와 .isEmpty()의 차이 (0) | 2022.08.01 |
[Java] String, StringBuilder, StringBuffer의 차이 (0) | 2022.08.01 |
[Java] 문자열 비교와 문자열 풀(String Pool) (0) | 2022.07.31 |
[Java] 객체의 생성과 사용 (0) | 2022.07.31 |