티스토리 뷰

반응형

쓰레드 상태제어

package day19;
//Thread - sleep()
public class ThreadExam07 {
	public static void main(String[] args) {
		Test01 t1 = new Test01();
		Test02 t2 = new Test02();
		
		t1.start();
		t2.start();
	}

}
class Test01 extends Thread{

	@Override
	public void run() {
		for(int i =0; i<3; i++) {
			System.out.println("%");
		}
	}
	
}
class Test02 extends Thread{

	@Override
	public void run() {
		for(int i =0; i<3; i++) {
			System.out.println("&");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
}

package day19;

public class Thread08 {
	public static void main(String[] args) {
		Test03 t3 = new Test03();
		t3.start();
		System.out.println("작업을 시작하겠습니다.");
		t3.interrupt();
		System.out.println("취소여부 :"+t3.isInterrupted());
		
	}

}
class Test03 extends Thread{

	@Override
	public void run() {
		int i =10;
		while(i!=0 && !isInterrupted()) {
			System.out.println(i--);
			for(long x=0; x<1500000000L;x++);	
		}
		System.out.println("작업이 취소되었습니다.");
	}
	
}

※개념정리

쓰레드가 어려운 이유는 동기화와 스케줄링이다. 이러한 스케줄링을 잘하기 위해선 실행제어를 알아야 한다.

*sleep(long millis) - 일정시간동안 쓰레드를 멈추게 한다. (ThreadExam07)
CPU의 시간을 다른 스레드에게 넘겨주는 효율적인 방법, 다른 스레드와 보조를 맞추는 용도
*join() - 다른 쓰레드의 작업을 기다린다.
*yeid() - 다른 쓰레드에게 양보
주어진 시간이 1초일 경우 0.5초는 사용하고 나머지는 다음 쓰레드에게 양보
yeid와 interrupt를 적절히 사용할 경우 프로그램의 응답성을 높이고 효율적인 실행 가능
*interrupt() 와 interrupted() - 쓰레드의 작업을 취소한다. (Thread08)
interrupt() 취소, interrupted() 취소여부

*suspend - 멈춤/ resume - 실행대기 / stop - 종료
이들은 교착상태를 쉽게 일으키기 때문에 사용을 권장하지 않음 - 이런것을 Deprecated

 

<상태>

NEW : 생성되었지만 아직 start( )가 안된상황

RUNNABLE : 실행(가능한)

BLOCKED : 일시정지(동기화블록)

WAITING / TIMED WAITING : 일시정지

TERMINATED : 종료

댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함