13-28~29 join(), yield()
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가 동작한다는 보장이 없다. 쓸 때와 안쓸 때 차이가 크지 않음.
Author And Source
이 문제에 관하여(13-28~29 join(), yield()), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@oyeon/13-2829-join-yield저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)