문제 풀면서 강의 진도 나갔다.
교재 요약집 훑어보며 복습.
static
제어자가 붙은 메서드들이 중요해보인다.static void sleep(long millis) static void sleep(long, int nanos)
지정된 시간동안 쓰레드를 멈추게 하는 sleep()
sleep()
에 의해 일시정지 상태가 된 쓰레드는 지정된 시간이 다 되거나 interrupt()
가 호출되면, InterruptedException
이 발생되어 실행대기 상태가 된다.
따라서 sleep()
을 호출해야 할 때는 항상 try-catch
문으로 예외를 처리해줘야 한다.
try{ Thread.sleep(1,5000){ } catch(InterruptedException e){}
매번 예외처리를 하는 것이 번거롭기 때문에 try-catch
문을 포함하는 메서드를 만들어 사용하기도 한다.
쓰레드에게 작업을 멈추게 하는 interrupt()
멈추라고 요청할 뿐 강제로 종료시키지는 못한다.
void interrupt() // 쓰레드의 interrupted상태를 false에서 true로 변경 boolean isInterrupted() // 쓰레드의 interrupted상태를 반환 static boolean interrupted() //현재 쓰레드의 interrupted상태를 반환 후, false로 변경
이름이 비슷해 헷갈릴 수 있다.
Thread th = new Thread(); th.start(); ... th.interrupt(); // 쓰레드 th에 interrupt() 호출 ... class MyThread extends Thread { public void run() { while (!interrupted()) { // interrupted()의 결과가 false인 동안 반복 } } }
static
이 붙은 sleep()
, interrupted()
는 모두 현재 쓰레드 즉, 자기 자신의 상태를 변경하는 메서드다.
객체이름.메서드()
의 형태로 호출하게 되면 해당 메서드를 관여하는 것이라는 착각을 하게 될 수도 있다.
따라서 Thread.sleep()
의 형태로 호출하는 것이 바람직하다.
해당 없음