hiflo
하이플로
hiflo
전체 방문자
오늘
어제
  • 분류 전체보기 (33)
    • 이런 분과 함께하고 싶어요 🙋‍♂️ (0)
    • Study in SSAFY (28)
      • Java Programming (2)
      • 이것이 자바다 (7)
      • Algorithm (2)
      • 면접을 위한 CS 전공지식 노트 (10)
      • Computer Science (7)
    • 기록들 (4)
    • 잡담 (1)

블로그 메뉴

  • 📷 Instagram
  • 🔧 관리자

인기 글

태그

  • 팩토리패턴
  • MVVM패턴
  • 비선형자료구조
  • 절차형프로그래밍
  • 우선순위큐
  • SSAFY 9기
  • complements
  • 선형자료구조
  • 백준
  • ssafy 면접
  • 디자인패턴
  • 싸피
  • 싱글톤패턴
  • 전략패턴
  • SSAFY
  • 비가중치코드
  • 2의보수
  • 수치코드
  • 자료구조
  • 이터레이터패턴
  • 가중치코드
  • 삼성청년SW아카데미
  • 함수형프로그래밍
  • 프록시패턴
  • 해시테이블
  • 영문숫자코드
  • mvp패턴
  • 노출모듈패턴
  • 프로그래밍패러다임
  • 선언형프로그래밍

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
hiflo

하이플로

[이것이 자바다] 12.4 멀티스레드 - 동기화 메소드와 동기화 블록
Study in SSAFY/이것이 자바다

[이것이 자바다] 12.4 멀티스레드 - 동기화 메소드와 동기화 블록

2022. 9. 12. 20:22

본 포스팅은 [이것이 자바다]의 내용을 참고하여 작성하였습니다.


 

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

 

멀티 스레드 프로그램에서는 스레드들이 객체를 공유해서 작업해야 하는 경우가 있음.

ex) 스레드 A가 사용하던 객체가 스레드 B에 의해 변경될 수 있기 때문에 A가 의도한 것과 다른 결과 산출.

 

 

 

12.4.2 동기화 메소드 및 동기화 블록

 

따라서 스레드가 사용 중인 객체를 다른 스레드가 변경할 수 없도록 하려면, 객체에 잠금을 걸어서 다른 스레드를 사용하지 못하게 해야 한다.

객체에 잠금을 걸기 위해 자바는 동기화(synchronized) 메소드와 동기화 블록을 제공한다.

 

스레드가 객체 내부의 동기화 메소드 또는 블록에 들어가면 즉시 객체에 잠금을 걸어 다른 스레드가 *임계 영역 코드를 실행하지 못하도록 한다. 동기화 메소드는 다음과 같이 메소드 선언 시 synchronized 키워드를 붙여 만들 수 있다.

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

*임계 영역(critical section): 멀티 스레드 프로그램에서 단 하나의 스레드만 실행할 수 있는 코드 영역

 

 

일부 내용만 임계 영역으로 만들고 싶다면 다음과 같이 동기화 블록을 만들면 된다.

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

동기화 블록의 외부 코드들은 여러 스레드가 동시에 실행할 수 있지만, 동기화 블록의 내부 코드는 한번에 한 스레드만 실행할 수 있고 다른 스레드는 실행할 수 없다.

 

만약 동기화 메소드와 동기화 블록이 여러 개 있을 경우, 스레드가 이들 중 하나를 실행할 때 다른 스레드는 해당 메소드를 포함해 다른 동기화 메소드 및 블록을 실행할 수 없다. (단, 일반 메소드는 실행 가능)

 

 

 

 

 

'Study in SSAFY > 이것이 자바다' 카테고리의 다른 글

[이것이 자바다] 12.6 멀티스레드 - 스레드 상태 제어  (0) 2022.09.12
[이것이 자바다] 12.5 멀티스레드 - 스레드 상태  (0) 2022.09.12
[이것이 자바다] 11. 기본 API 클래스(Math~Formatting)  (0) 2022.08.10
[이것이 자바다] 10. 예외 처리  (0) 2022.07.31
[이것이 자바다] 02. 변수와 타입  (0) 2022.07.27
    'Study in SSAFY/이것이 자바다' 카테고리의 다른 글
    • [이것이 자바다] 12.6 멀티스레드 - 스레드 상태 제어
    • [이것이 자바다] 12.5 멀티스레드 - 스레드 상태
    • [이것이 자바다] 11. 기본 API 클래스(Math~Formatting)
    • [이것이 자바다] 10. 예외 처리
    hiflo
    hiflo
    자극을 엔진으로 삼는

    티스토리툴바