java week 10


목차

1. Thread 클래스와 Runnable 인터페이스

2. 쓰레드의 상태

[3. 쓰레드의 우선순위]

[4. Main 쓰레드]

[5. 동기화]

[6. 데드락]


Thread 클래스와 Runnable 인터페이스


자바에서 스레드를 구현할 때 Thread Class와 Runnable Interface를 이용한다. 이 두가지 방법 중 어느 한쪽을 사용해도 별차이는 없지만 클래스를 상속받느냐 혹은 인터페이스를 상속받느냐 라는 차이가 이 두 방법의 차이점이 된다.

Thread 클래스 상속

class ThreadEx1 extends Thread{
    public void run(){
        //작업내용
    }
}
ThreadEx1 ex1 = new ThreadEx1();
ex1.start();

클래스는 다중 상속을 금지하고 있기때문에 Thread 클래스를 상속하여 실행하는 멀티쓰레드 작업은 다른 클래스를 상속 받을 수 없다.

Runnable 인터페이스 구현

class ThreadEx2 implements Runnable{
    public void run(){
        //작업내용
    }
}
ThreadEx2 ex2 = ThreadEx2();
Thread t = new Thread(ex2);
t.start();

start()와 run()에 대한 차이와 쓰레드가 실행되는 과정

run()을 호출하는 것은 생성된 쓰레드를 실행시키는 것이 아니라 단순히 클래스에 속한 메서드 하나를 호출하는 것이다. 반면에 start()는 새로운 쓰레드가 작업을 실행하는데 필요한 호출스택을 생성한 다음에 run()을 호출해서, 생성된 호출스택에 run()이 첫번째로 저장되게 한다


쓰레드의 상태


쓰레드가 start()하게 되면 다음과 같은 상태가 된다. 그림1

이 그림에서 실행대기(RUNNABLE)상태와 실행 상태를 살펴보자

그림2

  • 경우에 따라서 실행 상태에서 실행 대기 상태가 아닌 일시지 상태로 가기도 한다.

  • 일시 정지 상태에서 다시 실행하기 위해서는 바로 실행 상태가 되는 것이 아닌 실행 대기 상태를 거쳐 실행한다.

getState() : 쓰레드의 상태를 알 수 있도록 해주는 메소드

상태열거 상수설명
객체 생성NEW쓰레드 객체가 생성, 아직 START() 메소드가 호출되지 않는 상태
실행대기RUNNABLE실행 상태로 언제든지 갈 수 있는 상태
일시 정지WAITING다른 스레드가 통지할 때까지 기다리는 상태
 TIMED_WAITING주어진 시간 동안 기다리는 상태
 BLOCKED사용하고자 하는 객체의 락이 풀릴 때까지 기다리는 상태
종료TERMINATED실행을 마친 상태

출처

1. Thread 클래스와 Runnable 인터페이스

  • https://inor.tistory.com/10 [Inor]
  • https://dev-troh.tistory.com/47 [개발공부블로그] [2. 쓰레드의 상태]
  • https://widevery.tistory.com/27 [3. 쓰레드의 우선순위]

[4. Main 쓰레드]

[5. 동기화]

[6. 데드락]




© 2019.04. by salmon2

Powered by theorydb