1. 쓰레드란?
쓰레드는 하나의 프로그램 내에서 동시에 실행될 수 있는 작은 실행 단위입니다. 프로그램이 여러 작업을 동시에 처리할 수 있도록 도와줍니다.
2. 쓰레드 사용 이유
쓰레드를 사용하는 이유는 다음과 같습니다:
- 병렬 처리: 여러 작업을 동시에 처리하여 성능을 향상시킵니다.
- 응답성 향상: 긴 작업이 실행되는 동안에도 사용자 인터페이스가 계속 응답할 수 있도록 합니다.
3. 싱글 쓰레드
싱글 쓰레드는 하나의 작업만 순차적으로 처리합니다.
예제 코드 (싱글 쓰레드)
public class SingleThreadExample {
public static void main(String[] args) {
// 작업 1: 숫자 세기
for (int i = 1; i <= 5; i++) {
System.out.println("Counting: " + i); // 숫자를 출력
try {
Thread.sleep(1000); // 1초 대기 (1000밀리초)
} catch (InterruptedException e) {
e.printStackTrace(); // 예외 발생 시 스택 트레이스 출력
}
}
// 작업 2: 알파벳 출력
for (char c = 'A'; c <= 'E'; c++) {
System.out.println("Alphabet: " + c); // 알파벳을 출력
try {
Thread.sleep(1000); // 1초 대기 (1000밀리초)
} catch (InterruptedException e) {
e.printStackTrace(); // 예외 발생 시 스택 트레이스 출력
}
}
}
}
코드 설명
이 코드는 두 가지 작업(숫자 세기와 알파벳 출력)을 순차적으로 실행합니다.
- 숫자 세기: 1부터 5까지의 숫자를 출력하며, 각 숫자 사이에 1초의 대기 시간을 둡니다.
- 알파벳 출력: 'A'부터 'E'까지의 알파벳을 출력하며, 각 알파벳 사이에 1초의 대기 시간을 둡니다.
장점
- 구현이 간단하고 직관적입니다.
- 동기화 문제를 걱정할 필요가 없습니다.
단점
- 여러 작업을 동시에 처리할 수 없어서 비효율적일 수 있습니다.
- 긴 작업이 진행되는 동안 프로그램의 다른 부분이 블로킹될 수 있습니다.
4. 멀티 쓰레드
멀티 쓰레드는 여러 작업을 동시에 처리합니다.
예제 코드 (멀티 쓰레드)
class NumberThread extends Thread {
public void run() {
// 숫자 세기
for (int i = 1; i <= 5; i++) {
System.out.println("Counting: " + i); // 숫자를 출력
try {
Thread.sleep(1000); // 1초 대기 (1000밀리초)
} catch (InterruptedException e) {
e.printStackTrace(); // 예외 발생 시 스택 트레이스 출력
}
}
}
}
class AlphabetThread extends Thread {
public void run() {
// 알파벳 출력
for (char c = 'A'; c <= 'E'; c++) {
System.out.println("Alphabet: " + c); // 알파벳을 출력
try {
Thread.sleep(1000); // 1초 대기 (1000밀리초)
} catch (InterruptedException e) {
e.printStackTrace(); // 예외 발생 시 스택 트레이스 출력
}
}
}
}
public class MultiThreadExample {
public static void main(String[] args) {
NumberThread numberThread = new NumberThread(); // 숫자 세기 쓰레드 생성
AlphabetThread alphabetThread = new AlphabetThread(); // 알파벳 출력 쓰레드 생성
numberThread.start(); // 숫자 세기 쓰레드 시작
alphabetThread.start(); // 알파벳 출력 쓰레드 시작
}
}
코드 설명
이 코드는 두 가지 작업(숫자 세기와 알파벳 출력)을 동시에 실행합니다.
- NumberThread 클래스: 숫자 세기 작업을 수행하는 쓰레드입니다. 1부터 5까지의 숫자를 출력하며, 각 숫자 사이에 1초의 대기 시간을 둡니다.
- AlphabetThread 클래스: 알파벳 출력 작업을 수행하는 쓰레드입니다. 'A'부터 'E'까지의 알파벳을 출력하며, 각 알파벳 사이에 1초의 대기 시간을 둡니다.
- MultiThreadExample 클래스: NumberThread와 AlphabetThread를 생성하고, start() 메소드를 호출하여 두 쓰레드를 동시에 실행합니다.
장점
- 여러 작업을 동시에 처리하여 성능을 향상시킬 수 있습니다.
- 사용자 인터페이스가 더 부드럽고 반응성이 좋아집니다.
단점
- 동기화 문제에 주의해야 합니다.
- 쓰레드 관리가 복잡할 수 있습니다.
5. 싱글 쓰레드와 멀티 쓰레드의 차이
- 처리 방식:
- 싱글 쓰레드: 하나의 작업이 끝나야 다음 작업을 시작합니다. 순차적으로 처리됩니다.
- 멀티 쓰레드: 여러 작업이 동시에 처리됩니다. 각각의 작업이 별도의 쓰레드에서 병렬로 실행됩니다.
- 효율성:
- 싱글 쓰레드: 여러 작업을 동시에 처리할 수 없어서 비효율적일 수 있습니다.
- 멀티 쓰레드: 여러 작업을 동시에 처리하여 성능을 향상시킬 수 있습니다.
- 구현 난이도:
- 싱글 쓰레드: 구현이 간단하고 직관적입니다.
- 멀티 쓰레드: 동기화 문제와 쓰레드 관리를 고려해야 해서 구현이 더 복잡할 수 있습니다.
'JAVA' 카테고리의 다른 글
StringBuilder에 대한 가이드 (0) | 2024.08.07 |
---|---|
Iterator: 컬렉션을 안전하게 순회하기 (0) | 2024.08.05 |
객체지향(제네릭(Generic)) (0) | 2024.07.24 |
예외처리(Exception) (0) | 2024.07.24 |
객체지향(추상 클래스 (Abstract Class) ,인터페이스 (Interface)) (0) | 2024.07.24 |