13-22~25 sleep(), interrupt()

oyeon·2020년 12월 31일
0

Java 개념

목록 보기
55/70

sleep()

  • 현재 쓰레드를 지정된 시간동안 멈추게 한다.
static void sleep(long millis)			// 천분의 일초 단위
static void sleep(long millis, int nanos)	// 천분의 일초 + 나노초
  • 예외처리를 해야 한다.(InterruptedException이 발생하면 깨어남)
    (항상 예외처리 하기가 귀찮기 때문에 다음과 같은 method를 만들어서 사용하는 편)
// 예외처리를 포함한 메서드 구현
void delay(long millis){
    try{
    	Thread.sleep(millis);
    } catch(InterruptedException e) {}
}
// 사용
delay(15);
  • 특정 쓰레드를 지정해서 멈추게 하는 것이 불가능하다.(∵ static)
    (클래스 이름을 써서 사용해야 오해의 여지가 없다.)
try{
    Thread.sleep(2000);	// th1.sleep(2000) (X)
} catch(InterruptedException e) {}

interrupt()

  • 대기상태(WAITING)인 쓰레드를 실행대기 상태(RUNNABLE)로 만든다.
void interrupt()	     // 쓰레드의 interrupted 상태를 false에서 true로 변경
boolean isInterrupted()	     // 쓰레드의 interrupted 상태를 반환
static boolean interrupted() // 현재 쓰레드의 interrupted 상태를 알려주고 false로 초기화
  • ※ interrupted()는 static 메서드이므로 현재 쓰레드의 interrupted 상태를 알려줌! Thread.interrupted() 와 같이 사용. th1.interrupted() (X)
  • interrupted() 사용 이유 : true로 변경된 interrupted 상태를 false 상태로 바꿔야 다음 interrupt 상황에서 호출 되었는지 true로 변경하여 알 수 있다.
  • 예제
class practice extends Thread {
    public void run(){
    	...
        // 다운로드 중 취소버튼 클릭하면 interrupt() 호출하여 중단시킴!
        while(download && !isInterrupted()){	
            // download를 수행한다.
            ...
        }
        System.out.println("다운로드가 끝났습니다.");
    }
}
profile
Enjoy to study

0개의 댓글