프로그래밍/JAVA

Thread 간단 코드와 관련 메소드

라롸 2020. 2. 5. 17:53
  • Thread 클래스를 상속받아 스레드 실행

public class Task extends Thread{
 	@Override
	public void run() {
    	//스레드 작업 내용
	}
	
	public static void main(String[] args) { 
		try {
			Task t1 = new Task();
			Task t2 = new Task();
			t1.start(); // 스레드를 실행시키기
			t2.start();
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

  • Runnable 인터페이스를 상속받아 스레드 실행
public class Task implements Runnable{
	@Override
	public void run() {
		// 스레드 작업 내용
	}
	
	public static void main(String[] args) {
		Task t1 = new Task();
		Task t2 = new Task();
//		t1.start();  // X 
		Thread t1 = new Thread(t1);
		Thread t2 = new Thread(t2);
		t1.start();
		t2.start();
	}
}

 

 

 

  • 스레드 상태 제어 메소드

메소드 설명
interrupt() 일시 정지 상태의 스레드에서 예외를 발생시켜, 예외 처리 코드에서 실행 대기 상태로 가거나 종료 상태로 갈 수 있도록 한다.

notify() / notifyAll()

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

sleep(long millis) / sleep(long millis, int nanos)

주어진 시간 동안 스레드를 일시 정지 상태로 만든다. 시간이 지나면 자동적으로 실행 대기 상태가 된다.

join() / join(long millis) / join(long millis, int nanos)

 

join() 메소드를 호출한 스레드는 일시 정지 상태가 된다. 실행 대기 상태로 가려면, join 메소드를 멤버로 가지는 스레드가 종료되거나, 매개값으로 주어진 시간이 지나야 한다.

wait() / wait(long millis) / wait(long millis, int nanos)

동기화 브록 내에서 스레드르 일시정지 상태로 만든다. 매개값으로 주어진 시간이 지나면 자동적으로 실행 대기 상태가 된다. 시간이 주어지지 않으면 notify 메소드에 의해 실행 대기 상태로 갈 수 있다.
yield() 실행 중에 우선순위가 동일한 다른 스레드에게 실행을 양보하고 실행 대기 상태가 된다.