JAVA3_07_join(), yield()

charl hi·2021년 10월 1일
0

JAVA3

목록 보기
7/9

join()

  • th1.join();
  • (지정된 시간동안) 특정 쓰레드(th1)가 작업하는 것을 ✨main쓰레드가? 기다린다.
void join()		//작업이 모두 끝날 때까지
void join(long millis)		//천분의 일초 동안
void join(long millis, int nanos)		//천분의 일초+나노초 동안
  • 예외처리를 해야한다.
    -> ✨✨InterruptedException이 발생하면 기다리는 걸 멈추기 때문에
static long startTime = 0;

public static void main(String args[]) {
	MyThread1 th1 = new MyThread();
	MyThread2 th2 = new MyThread();
	th1.start();
	th2.start();
	startTime = System.currentTimeMillis();

	try {
		th1.join();	//main쓰레드가 th1의 작업이 끝날 때까지 기다린다.
		th2.join();	//main쓰레드가 th2의 작업이 끝날 때까지 기다린다.
	} catch(InterruptedException e) {}

	System.out.print("소요시간: " + (System.currentTimeMillis() - MyThread.startTime));
}	//main


ex13_11


public class Ex13_11 {
	static long startTime = 0;

	public static void main(String[] args) {
		Thread11_1 th1 = new Thread11_1();
		Thread11_2 th2 = new Thread11_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 Thread11_1 extends Thread{
	public void run() {
		for(int i=0; i<50; i++)
			System.out.print("-");
	}
}

class Thread11_2 extends Thread{
	public void run() {
		for(int i=0; i<50; i++)
			System.out.print("|");
	}
}

-----------------------------------||||||||||||||||||||||||||||||||||||||||||||||||||---------------소요시간: 5
  • 그 외 예시

링크텍스트

잘 이해 안감....



static yield()

  • 남은 시간을 다음 쓰레드에게 양보하고, 자신(현재 쓰레드)은 실행대기한다.

  • static : 자기 자신한테만 사용 가능!!!

  • OS스케줄러한테 양보한다고 통보할 뿐, 반드시 동작한다는 보장은 없다.

여기에

  1. else문 안에 Thread.yield();

  2. suspend() 안에 th.interrupt();

  3. stop() 안에 th.interrupt();




Ref

0개의 댓글