스레드의 라이프 사이클
- new -> runnable -> blocked -> dead
new : new 키워드로 Thread클래스를 상속받은 스레드 인스턴스 생성
runnable : start()메소드가 실행되어 run()메소드를 호출하고 실행하는 상태
blocked : 실행중인 스레드가 sleep()이나 join()메소드를 호출하거나, CPU의 할당이 필요치 않은 입출력 연산을 하게 되면,
CPU를 다른 스레드에 넘기고 본인은 blocked 상태가 되며, blocked상태가 끝나면 다시 runnable상태가 됩니다.
dead : run()메소드의 실행이 종료되면 dead상태가 됩니다.
.
.
class Sum{
int num;
public Sum(){ num = 0; }
public void addNum(int n){ num += n; }
public int getNum(){ return num; }
}
class AdderThread extends Sum implements Runnable{
// Thread클래스를 상속받지 못할 경우 Runnable 인터페이스를 이용하면 됨
int start, end;
public AdderThread(int s, int e){
start = s;
end = e;
}
public void run(){
for (int i = start ; i <= end ; i++ ){
addNum(i);
}
}
}
class RunnableThread{
public static void main(String[] args) {
AdderThread at1 = new AdderThread(1, 50);
AdderThread at2 = new AdderThread(51, 100);
Thread tr1 = new Thread(at1);
Thread tr2 = new Thread(at2);
// Runnable을 구현하는 클래스의 인스턴스를 이용하여 Thread객체 생성
tr1.start();
tr2.start();
try
{
tr1.join();
tr2.join();
// join() : 다른 쓰레드가 실행을 마치면 다음 쓰레드를 동작시킴
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println("1 ~ 100 까지의 합 : " + (at1.getNum() + at2.getNum()));
}
}
.
.
Thread클래스를 상속받지 못할 경우 Runnable 인터페이스를 이용하면 됩니다.
728x90
반응형
'Java > 본격 Java 스레드' 카테고리의 다른 글
[Java] synchronized thread 실습 (0) | 2020.07.02 |
---|---|
[Java] 우선순위 스레드(Priority Thread) (0) | 2020.07.02 |
[Java] 스레드(Thread) (0) | 2020.07.02 |