Java 공부

12장 작업 스레드 생성과 실행

게으른 개미 2018. 12. 2. 19:07

작업스레드를 생성하려면 몇개의 작업을 병렬로 실행할지 결정한다.

이후 작업스레드를 생성한다.


작업스레드를 생성하는 방법에는 두가지가 있다.

-Thread 클래스로부터 직접 생성

-Thread 하위 클래스로부터 생성


Thread 클래스로부터 직접 생성

첫번째, 동시에 실행해야할 작업이 있다면  작업내용을 클래스로 만들고, Runnable를 구현하여 run메소드를 재정의한다.


class Task implements Runnable {

public void run() {

스레드가 실행할 코드;

}

}


두번째, 방법1,2,3 중 하나를 선택하여 쓰레드 객체를 생성하고, 객체 안에 생성한 클래스를 매개값으로 넣어준다. 


방법1)    Runnable의 객체 생성 후 Thread의 매개값에 대입

Runnable task = new Task();

Thread thread = new Thread(task);


방법2)    익명 구현 객체 사용

Thread thread = new Thread( new Runnable()

public void run() {

스레드가 실행할 코드;

}

});


방법3)   람다식

Thread thread = new Thread(  () -> {

스레드가 실행할 코드;

});

* Runnable이 가지고 있는 함수가 run하나 이기때문에 ()(괄호)로 표현할 수 있는 것


여기서 방법1,2,3은 결국 생성한 클래스의 객체를 Thread객체의 매개값으로 대입해줌으로써 원리는 똑같음!


3. 방법1, 방법2, 방법3 중 하나를 이용해서 작성한 후 마지막으로 Thread.start(); 를 작성

   * 이때 Thread.start()는 재정의한 run메소드를 실행한다. ==> Thread가 실행됨



Thread 하위 클래스로부터 생성


방법1) Thread를 직접 상속받는 하위클래스를 작성

public class WorkerThread extends Thread {

@Override

public void run() {

   //스레드가 실행할 코드

}

}

Thread thread = new WorkerThread();   // 하위클래스로부터 스레드 객체를 직접 만든다.


방법2) Thread를 상속받는 익명객체를 만들어서 작성

Thread thread = new Thread() {

@Override

public void run() {

스레드가 실행할 코드;

}

};


방법1과 2중 하나를 선택해서 작성해주고, Thread.start(); 작성하여 스레드를 실행시킨다.



스레드의 이름

스레드의 이름은 기본적으로 아래와 같이 가지게 된다.

메인 스레드 이름 : main

작업 스레드 이름 : thread - n


작업 스레드의 이름을 변경하고자 할때

thread.setName("스레드 이름"); 


코드를 실행하는 스레드의 이름을 얻고 싶을 때는

1. 실행하고 있는 현 스렌드의 인스턴스를 얻어서

   Thread thread = Thread.currentThread();

2. 스레드의 이름을 얻으면 된다.

   thread.getName();


* 스레드의 이름은 프로그램에서 빈번히 사용되진 않지만 현재 스레드가 어떤 스레드인지 확인할 용도로 디버깅 단계에서 사용하곤 한다.


본 포스팅은 이것이 자바다 책을 참고하여 작성하였습니다.