스레드(Thread)
1. 스레드(Thread)란?
스레드(Thread)는 프로그램의 실행 흐름을 나타내는 작은 단위이다. 각 스레드는 독립적으로 실행될 수 있으며, 여러 스레드가 동시에 실행될 수 있다. 스레드는 프로세스 내에서 실행되는 여러 작업의 단위로, 프로세스 내의 자원을 공유하면서 실행된다. 자바에서 스레드는 Thread 클래스를 상속하거나 Runnable 인터페이스를 구현하여 생성할 수 있다.
2. 스레드 사용 이유와 예시
- 동시성(Concurrency): 여러 작업을 동시에 실행하여 시스템의 성능을 향상
- 응답성(Responsiveness): 사용자와의 상호 작용을 유지하면서 백그라운드에서 작업을 수행하여 프로그램이 더 빠르게 응답
- 자원 공유(Resource Sharing): 스레드는 같은 프로세스 내의 자원을 공유하므로 데이터를 효율적으로 공유하고 통신
사용 예시
- 상황: 파일 다운로드와 동시에 화면 업데이트
- 가정: 사용자가 웹 애플리케이션에서 파일을 다운로드하고 있는데, 동시에 다운로드 진행 상황을 화면에 표시
- 스레드 사용하지 않을 경우
사용자가 파일 다운로드를 시작하면, 파일 다운로드와 화면 업데이트가 동시에 이루어져야 하기에
파일 다운로드가 끝날 때까지 화면이 멈추고, 다운로드가 완료되면 한꺼번에 화면에 업데이트됨.
- 스레드 사용한 경우
파일 다운로드와 화면 업데이트를 각각 별도의 스레드에서 처리하여
사용자는 파일 다운로드가 진행되는 동안에도 화면이 계속 반응하며 업데이트됨.
즉, 여러 작업을 동시에 실행되기 위해서는 스레드를 사용해야한다. 스레드가 모이면 하나의 프로세스가 되는 점도 중요하다. 이 부분은 직접 공부하는게 더 이해가 빠를 것이다. 동시성 제어, 생성 등을 진행하기 위해선 스레드와 프로세스에 대해 이해해야 한다.
3. 주요 메서드
start() | 스레드를 시작하는 메서드 내부적으로 스레드의 run() 메서드를 호출하여 실행 |
run() | 스레드가 실행될 코드를 정의하는 메서드 start() 메서드에 의해 호출 |
sleep(long millis) | 현재 스레드를 주어진 시간만큼 정지시키는 메서드 밀리초 단위의 시간을 인자로 받는다. |
join() | 특정 스레드가 종료될 때까지 현재 스레드를 일시 정지시킨다. |
yield() | 다른 실행 대기 중인 스레드에게 실행 기회를 양보한다. |
interrupt() | 다른 스레드에게 인터럽트 신호를 보낸다. ※ InterruptedException을 발생시킨다. |
isAlive() | 스레드가 아직 실행 중인지 여부를 확인한다. |
currentThread() | 현재 실행 중인 스레드의 참조를 반환한다. |
4. 스레드/runnable 선언 방법
1. Thread 상속
class MyThread extends Thread {
public void run() {
// 스레드가 실행할 코드
}
}
// 스레드 생성 및 실행
MyThread myThread = new MyThread();
myThread.start(); // 스레드 실행
2. Runnable 인터페이스 구현
class MyRunnable implements Runnable {
public void run() {
// 스레드가 실행할 코드
}
}
// 스레드 생성 및 실행
Thread myThread = new Thread(new MyRunnable());
myThread.start(); // 스레드 실행
Runnable 인터페이스를 구현하는 방법은 클래스가 다른 클래스를 상속하고 있을 때 유용하며, 자바는 다중 상속을 지원하지 않기 때문에 Runnable 인터페이스를 구현하는 것이 더 유연한 설계할 수 있다. 스레드 생성 후 start() 메서드를 호출하여 스레드를 실행하면 된다.
'Programming > Java' 카테고리의 다른 글
[Java] 스트림(Steam) 사용법 | 민민의 하드디스크 - 티스토리 (0) | 2024.02.16 |
---|---|
[Java] 스트림(Stream)이란? | 민민의 하드디스크 - 티스토리 (0) | 2024.02.05 |
[Java - 자료구조] Map(HashMap, Hashtable, TreeMap)이란? (feat. JSON) | 민민의 하드디스크 - 티스토리 (0) | 2024.02.04 |
[Java] 제네릭(Generic)이란? | 민민의 하드디스크 - 티스토리 (2) | 2024.02.02 |
[Java - 자료구조] LinkedList와 ArrayList란? | 민민의 하드디스크 - 티스토리 (0) | 2024.02.02 |