본문 바로가기

Java/본격 Java 스레드

[Java] Runnable 스레드(Runnable thread)

스레드의 라이프 사이클
 - 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