12장 작업 스레드 생성과 실행
작업스레드를 생성하려면 몇개의 작업을 병렬로 실행할지 결정한다.
이후 작업스레드를 생성한다.
작업스레드를 생성하는 방법에는 두가지가 있다.
-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();
* 스레드의 이름은 프로그램에서 빈번히 사용되진 않지만 현재 스레드가 어떤 스레드인지 확인할 용도로 디버깅 단계에서 사용하곤 한다.
본 포스팅은 이것이 자바다 책을 참고하여 작성하였습니다.