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

블로그 메뉴

  • 📷 Instagram
  • 🔧 관리자

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
hiflo

하이플로

[이것이 자바다] 12.6 멀티스레드 - 스레드 상태 제어
Study in SSAFY/이것이 자바다

[이것이 자바다] 12.6 멀티스레드 - 스레드 상태 제어

2022. 9. 12. 22:22

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


 

12.6.1 주어진 시간동안 일시 정지: sleep()

실행중인 스레드를 일정 시간 멈추게 하고 싶다면 Thread 클래스의 정적 메소드인 sleep()을 사용하면 된다.

다음과 같이 Thread.sleep() 메소드를 호출한 스레드는 주어진 시간 동안 일시 정지 상태가 되고, 다시 실행 대기 상태로 돌아간다.

try {
	Thread.sleep(1000);
} catch(InterruptedException e) {
	// interrupt() 메소드가 호출되면 실행
}

매개값으로는 얼마 동안 일시 정지 상태로 있을 것인지, ms 단위로 시간을 주면 된다.

주어진 시간이 되기 전에 interrupt() 메소드가 호출되면 InterruptedException이 발생하기 때문에 예외 처리가 필요하다.

 

 

 

12.6.2 다른 스레드에게 실행 양보: yield()

스레드가 처리하는 작업은 반복적인 실행을 위해 for문이나 while문을 포함하는 경우가 많다.

가끔은 이러한 반복문들이 무의미한 반복을 하는 경우가 있다. 다음 코드로 예시를 들어보자.

public void run() {
    while(true) {
        if(work) {
        	System.out.println("Thread A 작업 내용");
        }
    }
}

스레드가 시작되어 run() 메소드를 실행하면 while(true){ } 블록을 무한 반복 실행한다. 만약 work의 값이 false이고 그 값이 true로 변경되는 시점이 불명확하다면, while문은 어떠한 실행문도 실행하지 않으면서 무의미한 반복을 한다.

이것보다는 다른 스레드에게 실행을 양보하고 자신은 실행 대기 상태로 가는 것이 전체 프로그램 성능에 도움이 된다.

 

이런 기능을 위해서 스레드는 yield() 메소드를 제공하고 있다. yield() 메소드를 호출한 스레드는 실행 대기 상태로 돌아가고 동일한 우선순위 또는 높은 우선순위를 갖는 다른 스레드가 실행 기회를 가질 수 있도록 해준다.

 

다음 코드는 의미 없는 반복을 줄이기 위해 yield() 메소드를 호출해서 다른 스레드에게 실행 기회를 주도록 수정한 것이다.

public void run() {
    while(true) {
    	if(work) {
        	System.out.println("Thread A 작업 내용");
        } else {
        	Thread.yield(); // work가 false가 되면 다른 스레드에게 실행 양보
        }
    }
}

 

 

 

 

 

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

[이것이 자바다] 16.11 스트림과 병렬처리 - 수집(collect())  (0) 2022.09.14
[이것이 자바다] 12.5 멀티스레드 - 스레드 상태  (0) 2022.09.12
[이것이 자바다] 12.4 멀티스레드 - 동기화 메소드와 동기화 블록  (0) 2022.09.12
[이것이 자바다] 11. 기본 API 클래스(Math~Formatting)  (0) 2022.08.10
[이것이 자바다] 10. 예외 처리  (0) 2022.07.31
    'Study in SSAFY/이것이 자바다' 카테고리의 다른 글
    • [이것이 자바다] 16.11 스트림과 병렬처리 - 수집(collect())
    • [이것이 자바다] 12.5 멀티스레드 - 스레드 상태
    • [이것이 자바다] 12.4 멀티스레드 - 동기화 메소드와 동기화 블록
    • [이것이 자바다] 11. 기본 API 클래스(Math~Formatting)
    hiflo
    hiflo
    자극을 엔진으로 삼는

    티스토리툴바