Java/객체지향

[객체지향][쓰레드/thread] - join(), yield()

얄루몬 2022. 3. 3. 22:07

https://youtu.be/uY_xbLi_cSA?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp 

📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.


[join( )]

  • 지정된 시간동안 특정 쓰레드가 작업하는 것을 기다려준다.
void join() // 작업이 모두 끝날 때까지
void join(long millis) // 천분의 일초 동안
void join(long millis, int nanos) // 천분의 일초 + 나노초 동안
  • 예외처리를 해야 한다.
package javajungsuk;

public class Java13_11 {
	static long startTime = 0;
	
	public static void main(String[] args) {
		ThreadEx11_1 th1 = new ThreadEx11_1();
		ThreadEx11_2 th2 = new ThreadEx11_2();
		
		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));
	}
}

class ThreadEx11_1 extends Thread{
	public void run() {
		for (int i = 0; i < 300; i++)
			System.out.print(new String("-"));
	}
}
class ThreadEx11_2 extends Thread{
	public void run() {
		for (int i = 0; i < 300; i++)
			System.out.print(new String("|"));
	}
}

[yield( )]

  • 남은 시간을 다음 쓰레드에 양보하고, 자신(현재 쓰레드)은 실행 대기한다.
  • yield( )와 interrupt( )를 적절히 사용하면, 응답성과 효율성을 높일 수 있다.