record logo record

스레드(Thread) 란?


스레드(Thread) 생성자, 메소드

생성자 내용
Thread()  
Thread(String s) 스레드 이름
Thread(Runnable r) 인터페이스 객체
Thread(Runnable r, String s) 인터페이스 객체와 스레드 이름


메소드 내용
static void sleep(long msec) throws Interrupted Exception msec에 지정된 밀리초 동안 대기
String getName() 스레드의 이름을 s로 설정
void setName(String s) 스레드의 이름을 s로 설정
void start() 스레드를 시작 run() 메소드 호출
int getPriority() 스레드의 우선 순위를 반환
void setpriority(int p) 스레드의 우선순위를 p값으로
boolean isAlive() 스레드가 시작되었고 아직 끝나지 않았으면 true 끝났으면 false 반환
void join() throws InterruptedException 스레드가 끝날 때 까지 대기
void run() 스레드가 실행할 부분 기술 (오버라이딩 사용)
void suspend() 스레드가 일시정지 resume()에 의해 다시시작 할 수 있다.
void resume() 일시 정지된 스레드를 다시 시작.
void yield() 다른 스레드에게 실행 상태를 양보하고 자신은 준비 상태로

스레드(Thread) 생성 예제

Thread 클래스 이용하기

//== Thread Class ==//
class MyThread extends Thread {
  
  public void run() {
    try {
      for(int i = 0 ; i < 10 ; i++) {
          //스레드 0.5초동안 대기
          Thread.sleep(500);
          System.out.println("Thread : " + i);
      }
    } catch(InterruptedException e) {
      System.out.println(e);
    }
  }
}

//== Main Class ==//
public class Thread1 {

  public static void main(String[] args) {
		MyThread thread1 = new MyThread();
    MyThread thread2 = new MyThread();
    //1.동시에 같은 숫자가(start)
    thread1.start();
    thread2.start();
    
    //2.번갈아가면서 나옴(run)
    thread1.run();
    thread1.run();
	}
}

java-thread_start_run

Runable 클래스 이용하기

//== Runnable Class ==//
public class MyRunnable implements Runnable {

	@Override
	public void run() {
		try {
			for (int i = 0; i < 10; i++) {
				Thread.sleep(500);
				System.out.println("Thread="+i);
			}
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

//== Main Class ==//
public class Thread2 {
	public static void main(String args[]) {
    // Runnable 인터페이스 객체생성
    MyRunnable Obj1 = new MyRunnable();
    MyRunnable Obj2 = new MyRunnable();
    
    // Runnable 객체를 매개변수로 하여 스레드 객체 th생성
    Thread thread1 = new Thread(Obj1);
    Thread thread2 = new Thread(Obj2);
    
    thread1.start();
    thread2.start();

    thread1.run();
    thread2.run();
  }
}

스레드(Thread) 생성주기

java-thread_make_cycle

스레드(Thread) 생명주기

스레드 생명주기 (더 자세한 그림)

java-thread_make_cycle_detail

출처

Question

Java Thread에서 Thread클래스와 Runnable의 차이점은 무엇인가??

Thread는 클래스이고 Runnable는 JDK 라이브러리 인터페이스 입니다. 즉, Thread 클래스를 상속받거나 Runnable 인터페이스를 구현하여 Thread를 생성할 수 있습니다.

Runnable 인터페이스는 run()메소드만 정의 되어있습니다.

언제 Runnable 인터페이스를 이용하는가??

스레드를 생성해야하는 상황에서 현재의 클래스가 이미 다른 클래스로부터 상속 받고 있다면 Runnable 인터페이스를 이용하여 스레드를 생성할 수 있습니다.

References