Dorothy_YANG
With Dorothy
Dorothy_YANG
전체 방문자
오늘
어제
  • 분류 전체보기 (279)
    • Hi, I'm Dorothy 🕵️‍♂️ (21)
      • Slowly but Surely (18)
      • IT certifications (3)
    • 🤯TIL (80)
      • HTML & CSS (2)
      • Javascript & jQuery (13)
      • React (13)
      • C언어 (1)
      • JAVA (22)
      • Python (2)
      • Oracle SQL (10)
      • My SQL (5)
      • Spring (12)
    • 💻Programmers (17)
    • 🏫 Open API_JAVA (101)
    • 🌎 Project (10)
      • Shopping (10)
    • 💥 Error (24)
    • ⚙ Setting (23)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • oracle
  • 연습문제
  • AllArgsConstructor
  • HTML
  • 코딩앙마
  • googlecolaboratory
  • 창초기화
  • 비쥬얼스튜디오코드
  • 기간설정
  • 백준
  • 오류해결
  • 파이썬온라인
  • Eclipse
  • 시작일종료일
  • 서버등록
  • SQL
  • Database
  • 이것이자바다
  • java
  • 노마드코더
  • spring
  • sql기간
  • 콜라보레이토리
  • SQLD합격
  • SQLD합격후기
  • 기간쿼리
  • colaboratory
  • Javascript
  • CSS
  • 독학후기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Dorothy_YANG

With Dorothy

[45일차] 동기화 메소드와 동기화 블록 / 스레드 상태 / 스레드 상태 제어 / 데몬 스레드
🏫 Open API_JAVA

[45일차] 동기화 메소드와 동기화 블록 / 스레드 상태 / 스레드 상태 제어 / 데몬 스레드

2022. 9. 27. 19:11
728x90

20220926(월)

  • 목차 
    - 동기화 메소드와 동기화 블록
    - 스레드 상태
    - 스레드 상태 제어
    - 데몬 스레드

 


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

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

 

 

  • 동기화?
    - 한 스레드가 사용 중인 객체를 다른 스레드에서 동시에 접근할 수 없도록 잠금을 걸어둘 수 있는 기능
더보기

 user1 스레드가 먼저 메소드를 사용하게되면, lock이 걸리게되고,
 user2 스레드는 이 메소드를 진입을 못하게된다.

 

 user1 스레드가 작업이 끝나야 비로소 unlock이 되어,
 user2 스레드는 블럭상태가 해제가 되어 아래 메소드를 진입하게 된다.

 

  • 2가지 방법
동기화 메소드 : 메소드에 걸고 싶은 경우 동기화 블록 : 직접적인 코드에 걸고 싶은 경우
public  synchronized  void method() {
           임계영역; // 단 하나의 스레드만 실행
}
public void method () {
        // 여러 스레드가 실행 가능 영역
         ...
        synchronized (공유객체) {
        임계 영역 // 단 하나의 스레드만 실행
         }
         // 여러 스레드가 실행 가능 영역
         ...
}

 


< 스레드 상태 >

  • 스레드 객체 생성 (NEW) _start() ➡ (실행 대기(RUNNABLE) ↔ 실행) 반복 ➡ 종료(TERMINATED)

  • 스레드에 일시정지 상태 도입한 경우

상태 열거상수 설명
객체 생성 NEW 스레드 객체가 생성, 아직 start()  메소드가 호출되지 않은 상태
실행 대기 RUNNABLE 실행 상태로 언제든지 갈 수 있는 상태
일시 정지 BLOCKED 사용하고자 하는 객체의 락이 풀릴 때까지 기다리는 상태
WAITING 다른 스레드가 통지할 때까지 기다리는 상태
TIMED WATING 주어진 시간 동안 기다리는 상태
종료 TERMINATED 실행을 마친 상태

 


< 스레드 상태 제어 >

  • 상태 제어
    - 실행 중인 스레드의 상태를 변경하는 것
    - 상태 변화를 가져오는 메소드의 종류 (취소선 가진 메소드는 사용 X)

sleep() 주어진 시간동안 일시 정지 얼마 동안 일시 정지 상태로 있을 것인지 밀리 세컨드(1/1000) 단위로 지정
일시 정지 상태에서 interrupt() 메소드 호출
yield() 다른 스레드에게 실행 양보  
join() 다른 스레드의 종료를 기다림 계산 작업을 하는 스레드가 모든 계산 작업 마쳤을 때, 결과값을 받아 이용하는 경우 주로 사용
wait()
notify()
notifyAll()
스레드 간 협업 동기화 메소드 또는 블록에서만 호출 가능한  object의 메소드
두 개의 스레드가 교대로 번갈아가며 실행해야 할 경우 주로 사용
stop 플래그,
interrupt()
스레드의 안전한 종료 경우에 따라 실행 중인 스레드 즉시 종료해야 할 필요 있을 때 사용

 


< 데몬 스레드 >

  • 데몬(daemon) 스레드
    주 스레드의 작업 돕는 보조적인 역할 수행하는 스레드
    주 스레드가 종료되면 데몬 스레드는 강제적으로 자동 종료
    워드프로세서의 자동저장, 미디어플레이어의 동영상 및 음악 재생, GC

  • 스레드를 데몬 스레드로 만들기 
    주 스레드가 데몬이 될 스레드의 setDaemon(true) 호출
    반드시 start() 메소드 호출 전에 setDaemon(true) 호출
     그렇지 않으면 IllegalThreadStateException이 발생

  • 현재 실행중인 스레드가 데몬 스레드인지 구별법
    isDaemon() 메소드의 리턴값 조사 – true면 데몬 스레드
728x90
저작자표시 (새창열림)

'🏫 Open API_JAVA' 카테고리의 다른 글

[47일차] Set 컬렉션(HashSet) / Map 컬렉션(HashMap, Hashtable, Properties) / 검색 기능을 강화시킨 컬렉션 / LIFO와 FIFO 컬렉션  (0) 2022.09.29
[46일차] 스레드 그룹 / 스레드풀 / 컬렉션 프레임워크 / List 컬렉션  (0) 2022.09.28
[44일차] 멀티 스레드 개념 / 작업 스레드 생성과 실행 / 스레드 우선순위  (0) 2022.09.26
[43일차] Math, Random 클래스 / Date, Calendar 클래스 / Format 클래스 / java.time 패키지  (0) 2022.09.23
[42일차] String 클래스 / String Tokenizer 클래스 / String Buffer, String Builder 클래스 / 정규 표현식과 Pattern 클래스 / Arrays 클래스 / 포장(Wrapper) 클래스 (API 클래스)  (0) 2022.09.22
    '🏫 Open API_JAVA' 카테고리의 다른 글
    • [47일차] Set 컬렉션(HashSet) / Map 컬렉션(HashMap, Hashtable, Properties) / 검색 기능을 강화시킨 컬렉션 / LIFO와 FIFO 컬렉션
    • [46일차] 스레드 그룹 / 스레드풀 / 컬렉션 프레임워크 / List 컬렉션
    • [44일차] 멀티 스레드 개념 / 작업 스레드 생성과 실행 / 스레드 우선순위
    • [43일차] Math, Random 클래스 / Date, Calendar 클래스 / Format 클래스 / java.time 패키지
    Dorothy_YANG
    Dorothy_YANG
    Slowly but Surely, 비전공 문과생의 개발공부

    티스토리툴바