4-3.(2) Thread yield()메서드

zhyun·2020년 9월 23일
0

HighJava

목록 보기
29/67
  • Thread => 실질적 작업단위 (Single Thread & Multi Thread)

yeild()메서드

1) 현재 실행 대기중인 동등한 우선순위 이상의 다른 스레드에게
실행기회를 제공한다.(양보)
2) 현재 실행중인 스레드의 상태를 Runnable상태로 바꾼다.
: Waiting이나 Block 상태로 바뀌지 않는다.
: Runnable -> Runnable (할당 cpu를 다른사람에게 준다라는 의미?)
3) yield()메서드를 실행한다고 해서 현재 실행중인 스레드
곧바로 Runnable 상태로 전이된다고 확신할 수 없다.

T12_ThreadYieldTest
=> yield()Thread.yield() 같다.
: Thread를 extends 해서 Thread 생략가능하다.

public class T12_ThreadYieldTest {
	public static void main(String[] args) {
		Thread th1 = new YieldThread1();
		Thread th2 = new YieldThread2();
		
		th1.start();
		th2.start();
		// 콘솔창에 YieldThread1이 양보했지만 양보할 수도 있고 안할 수도 있다.
	}//main
}//class

양보 기능 테스트용 쓰레드 클래스

class YieldThread1 extends Thread{
	@Override
	public void run() {
		for (int i = 0; i < 100; i++) { //for문 5바퀴 돌면서 i 찍는다
			System.out.println("YieldThread1 : "+ i);
			yield(); 
            		//양보하기 (static 메서드) 
                    	//=> Thread.yield() : 쓰레드 extends 해서 Thread. 생략가능
		}
	}
}

양보 기능 없는 쓰레드

class YieldThread2 extends Thread{
	@Override
	public void run() {
		for (int i = 0; i < 5; i++) {
			System.out.println("YieldThread2 : "+ i);
		}
	}
}
  • 양보 기능 있는 YieldThread1의 객체 th1
  • 양보 기능 없는 YieldThread2의 객체 th2
    => YieldThread1에 yield() 사용했지만 양보할 수도 있고 안할 수도 있다.
    => 아래와 같이 콘솔창의 결과 값이 YieldThread1로 끝날 수도 있고
    YieldThread2로 끝날 수도 있다.
profile
HI :)

0개의 댓글