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();
th2.join();
} catch(InterruptedException e) {}
System.out.print("소요시간 : " + (System.currentTimeMillis() - startTime));
}
- 사용예 : 유사 gc 구현. 메모리가 부족한 경우 gc.interrupt() 호출 후 gc가 작업할 시간(메모리를 정리할 시간)을 주어야 메모리 사용 가능. 이때 join()으로 작업할 시간을 준다.
yield()
- 남은 시간을 다음 쓰레드에게 양보하고, 자신(현재 쓰레드)은 실행대기 한다.

- yield()와 interrupt()를 적절히 사용하면, 응답성과 효율을 높일 수 있다.
- yield는 OS 스케쥴러에게 통보하기 때문에 yield가 동작한다는 보장이 없다. 쓸 때와 안쓸 때 차이가 크지 않음.