13-28~29 join(), yield()

4946 단어 JavaJava

join()

  • 지정된 시간동안 특정 쓰레드가 작업하는 것을 기다린다.
void join()		// 작업이 모두 끝날 때까지 기다린다.
void join(long millis)	// 천분의 일초 동안 기다린다.
void join(long millis, int nanos)	// 천분의 일초 + 나노초 동안 기다린다.
  • 예외처리를 해야 한다.(InterruptedException이 발생하면 작업 재개)
public static void main(String args[]){
    Thread1 th1 = new Thread1();
    Thread2 th2 = new Thread2();
    th1.start();
    th2.start();
    startTime = System.currentTimeMillis();
    
    try{
        th1.join();	// main 쓰레드가 th1의 작업이 끝날 때까지 기다린다.
        th2.join();	// main 쓰레드가 th2의 작업이 끝날 때까지 기다린다.
    } catch(InterruptedException e) {}
    System.out.print("소요시간 : " + (System.currentTimeMillis() - startTime));
}
  • 사용예 : 유사 gc 구현. 메모리가 부족한 경우 gc.interrupt() 호출 후 gc가 작업할 시간(메모리를 정리할 시간)을 주어야 메모리 사용 가능. 이때 join()으로 작업할 시간을 준다.

yield()

  • 남은 시간을 다음 쓰레드에게 양보하고, 자신(현재 쓰레드)은 실행대기 한다.
  • yield()와 interrupt()를 적절히 사용하면, 응답성과 효율을 높일 수 있다.
  • yield는 OS 스케쥴러에게 통보하기 때문에 yield가 동작한다는 보장이 없다. 쓸 때와 안쓸 때 차이가 크지 않음.

좋은 웹페이지 즐겨찾기