일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 시큐어코딩
- 김영한
- JPA
- 자바공부
- 서블릿
- 이것이자바다
- REGEXP_SUBSTR
- 제네릭
- docker
- inflearn
- 스프링 부트와 JPA
- 스프링입문
- 자바의정석
- Java의정석
- 스프링 핵심원리
- DispatcherServlet
- Python
- 자바연습문제
- Secure Coding
- java
- 불친절한 SQL 프로그래밍
- Numpy
- 분석함수
- Spring
- 자바의정석 연습문제
- 스프링MVC
- 인프런
- 계층 쿼리
- 불친절한SQL프로그래밍
- 스프링
- Today
- Total
Continuous Challenge
[이것이 자바다] 작업 스레드 본문
작업 스레드 생성과 실행
멀티 스레드로 실행하는 프로그램을 개발하려면 몇 개의 작업을 병렬로 실행할지 결정하고 각 작업별로 스레드를 생성해야 한다.
자바 프로그램은 메인 스레드가 반드시 존재하기 때문에 메인 작업 이외에 추가적인 작업 수만큼 스레드를 생성하면 된다.
자바는 작업 스레드도 객체로 관리하므로 클래스가 필요하다. Thread 클래스로 직접 객체를 생성해도 되지만, 하위 클래스를 만들어 생성할 수도 있다.
Thread 클래스로 직접 생성
Thread thread = new Thread(Runnable target);
java.lang 패키지에 있는 Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면 다음과 같이 Runnable 구현 객체를 매개값으로 갖는 생성자를 호출하면 된다.
Runnable은 스레드가 작업을 실행할 때 사용하는 인터페이스이다. Runnable에는 run() 메소드가 정의되어 있는데, 구현 클래스는 run()을 재정의해서 스레드가 실행할 코드를 가지고 있어야 한다.
class Task implements Runnable {
@Override
public void run() {
//스레드가 실행할 코드
}
}
Runnable 구현 클래스는 작업 내용을 정의한 것이므로, 스레드에게 전달해야 한다.
Runnable task = new Task();
Thread thread = new Thread(task);
Runnable 구현 객체를 생성한 후 Thread 생성자 매개값으로 Runnable 객체를 전달하면 된다.
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
//스레드가 실행할 코드
}
}
또는 명시적인 Runnable 구현 클래스를 작성하지 않고 Thread 생성자를 호출할 때 Runnable 익명 구현 객체를 매개값으로 사용할 수 있다. (더 많이 사용되는 방법)
작업 스레드를 실행하려면 스레드 객체의 start() 메소드를 호출해야 한다.
thread.start();
start() 메소드가 호출되면, 작업 스레드는 매개값으로 받은 Runnable의 run() 메소드를 실행하면서 작업을 처리한다.
Thread 자식 클래스로 생성
Thread 클래스를 상속한 다음 run() 메소드를 재정의해서 스레드가 실행할 코드를 작성하고 객체를 생성하면 된다.
public class WorkerThread extends Thread {
@Override
public void run() {
//스레드가 실행할 코드
}
}
//스레드 객체 생성
Thread thread = new WorkerThread();
명시적인 자식 클래스를 정의하지 않고, Thread 익명 자식 객체를 사용할 수도 있다. (더 많이 사용되는 방법)
Thread thread = new Thread() {
@Override
public void run() {
//스레드가 실행할 코드
}
};
thread.start();
'Study > 이것이 자바다' 카테고리의 다른 글
[이것이 자바다] 스레드 상태 (0) | 2023.05.02 |
---|---|
[이것이 자바다] 멀티 스레드 (0) | 2023.04.11 |
[이것이 자바다] 와일드카드 타입 파라미터 (0) | 2023.04.03 |
[이것이 자바다] 제한된 타입 파라미터 (0) | 2023.04.03 |
[이것이 자바다] 제네릭 메소드 (0) | 2023.04.03 |