티스토리 뷰

반응형

1편 스레드 객체생성 및 실행

2편 스레드 우선순위와 객체공유 및 동기화

3편 스레드 상태 및 제어


스레드 상태확인은 스레드 클래스에 있는 getState() 메소드를 사용하면 Thread.State 열거 상수를 리턴한다.

순서는 객체생성 > 실행대기 > 일시정지 > 실행대기 > 종료 순으로 상태가 변한다.

package test;

import java.lang.Thread.State;

public class Ex2 {
	public static void main(String[] args) {
		/*
		 * 상태		열거상수 		설명
		 * 객체생성	NEW		start()메소드가 호출되지 않은 상태
		 * 실행대기	RUNNABLE	실행 상태로 언제든지 갈 수 있는 상태
		 * 
		 * 일시정지	WAITING		다른 스레드가 통지할 떄까지 기다리는 상태
		 *		TIMED_WAITING	주어진 시간 동안 기다리는 상태
		 *		BLOCKED		사용할 객체의 락이 푸릴 때까지 기다리는 상태
		 *
		 * 종료		TERMINATED	실행을 마친 상태
		 */
		
		Thread thread = new Thread(new Runnable() {
			@Override
			public void run() {
				Thread thread2 = new Thread(new Runnable() {
					@Override
					public void run() {
						for (int i = 0; i < 2000000000; i++);
						try {
							Thread.sleep(1000);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						for (int i = 0; i < 2000000000; i++);
					}
				});

				while (true) {
					System.out.println(thread2.getState());
					if (thread2.getState() == State.NEW) {
						thread2.start();
						System.out.println(thread2.getState());
					} else if (thread2.getState() == State.TERMINATED) {
						break;
					}

					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		});

		thread.start();
	}
}

결과 값

NEW

RUNNABLE

TIMED_WAITING

TIMED_WAITING

TIMED_WAITING

TIMED_WAITING

TIMED_WAITING

TIMED_WAITING

TIMED_WAITING

TIMED_WAITING

TIMED_WAITING

RUNNABLE

TERMINATED



스레드 상태 제어

 메소드

설명 

 interrupt()

스레드가 일시 정지 상태가 되면 interruptedExcption 예외 발생시켜 catch문으로 이동시킨다. 

 notify()

 notifyAll() 

동기화 블록에서 wait()메소드에 의해 일시 정지 상태로 된 스레드를 실행 대기 상태로 만든다. 

 sleep(long mills) 

주어진 시간동안 스레드를 일시 정지 시킨 후 시간이 지나면 다시 실행 대기상태로 돌아간다. 

 join()

 join(Long mills) 

메소드를 호출한 스레드는 일시 정지 상태가 되며, join()메소드를 멤버로 가진 스레드가 종료되거나 주어진 시간이 지나야 한다. 

 wait()

 wait(Long mills)

동기화 블록에서 스레드를 일시 정지 상태로 만든 후 notify()메소드를 이용하여 실행 대기상태로 만든다.  만약 매개값 을 입력하면 주어진 시간이 지나면 자동으로 실행 대기 상태로 간다.

 yield()

실행 중 우선순위가 동일한 다른 스레드에 실행을 양보하고 실행 대기 상태가 된다.

 resume()

 suspend()

 yield()

 stop()

스레드의 안전성을 해친다고 판단하여 더이상 사용하지 않도록 권장된 메소드



반응형
댓글
최근에 올라온 글
최근에 달린 댓글