동기화 메소드와 동기화 블록

2022. 4. 26. 18:59java/java

*공유 객체를 사용할 때의 주의할 점

 1) 멀티 스레드가 하나의 객체를 공유하므로해서 생기는 오류

user 1스레드가 memory 필드를 100으로 입력하고 2초간 일시 정지 하고 user2스레드가 메모리를 50으로 저장한다

이때 user1의 memory 필드를 출력하면 원래의 의도와는 다르게 50이 출력된다 이를 막기 위해 자바는 동기화 블록을 제공한다.

 

*동기화 메소드 및 동기화 블록 - synchronized

 1) 단 하나의 스레드만 실행할 수 있는 메소드 또는 블록을 말한다.

 2) 다른 스레드는 메소드나 블록이 실행이 끝날 때까지 대기해야 한다.

 

 3) 동기화 메소드

public syschronized void method() {
	임계 영역; //단 하나의 스레드만 실행
}

4)동기화 블록

public void method() {
	//여러 스레드가 실행 가능 영역
    
	synchronized(공유객체) {
    	임계영역 //단 하나의 스레드만 실행
    }
    //여러 스레드가 실행 가능 영역 
}

 

 

 

 

'java > java' 카테고리의 다른 글

입력스트림과 출력 스트림 개념(2)  (0) 2022.04.26
스레드 상태  (0) 2022.04.26
입력 스트림과 출력 스트림 개념  (0) 2022.04.25
스레드 우선 순위  (0) 2022.04.23
작업 스레드 생성과 실행  (0) 2022.04.22