일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- git branch 삭제
- DBMS
- analytics4
- 오블완
- docker build
- java
- ANTIFRAGILE
- 컬렉션프레임워크
- spring
- git pat
- gtihub
- pat발급
- 티스토리챌린지
- JPA
- db종류
- Python
- IntelliJ
- 데이터내보내기
- 자바
- 명령어
- 도커이미지
- docker
- 애널리틱스4
- codeium
- 르세라핌
- 11월순위
- docker push
- JPQL
- macvlan
- Today
- Total
hanker
JAVA - JAVA에서 쓰레드란 무엇이며, 어떻게 생성할까? 본문
Java에서 쓰레드(Thread)는 하나의 프로세스 내에서 실행되는 독립적인 실행 흐름을 말한다.
자바에서는 멀티쓰레딩을 지원하여, 하나의 프로그램이 동시에 여러 작업을 병렬로 처리할 수 있도록 해준다.
멀티쓰레딩은 CPU 활용을 극대화하고, 프로그램의 응답성을 개선하며, 작업을 효율적으로 처리할 수 있도록 도와준다.
쓰레드는 Thread 클래스 또는 Runnable 인터페이스를 사용하여 생성할 수 있습니다.
쓰레드 생성 방법
방법 1: Thread 클래스를 상속하여 쓰레드 생성
Thread 클래스를 상속하고, run() 메서드를 오버라이드하여 실행할 작업을 정의한다.
public class MainEx {
public static void main(String[] args) {
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start(); // 쓰레드 실행
thread2.start();
}
}
// Thread 클래스를 상속하여 쓰레드 생성
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " - Count: " + i);
}
}
}
결과.
start() 메서드를 호출하면 새로운 쓰레드가 시작되고, run() 메서드가 실행된다.
방법 2: Runnable 인터페이스를 구현하여 쓰레드 생성
Runnable 인터페이스를 구현하고, 이를 Thread 객체에 전달하여 쓰레드를 생성한다.
public class MainEx {
public static void main(String[] args) {
MyRunnable runnable = new MyRunnable();
Thread thread1 = new Thread(runnable);
Thread thread2 = new Thread(runnable);
thread1.start(); // 쓰레드 실행
thread2.start();
}
}
// Runnable 인터페이스를 구현하여 쓰레드 생성
class MyRunnable implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " - Count: " + i);
}
}
}
결과.
Thread 생성자에 Runnable 객체를 전달하면 쓰레드 실행이 가능하며 Runnable 인터페이스를 사용하면 다중 상속 문제를 피하기 위해 유용하다.
방법 3: 익명 클래스 또는 람다식 사용
익명 클래스를 사용하거나, 자바 8 이상의 경우 람다식을 사용하여 간결하게 쓰레드를 생성할 수 있다.
public class MainEx {
public static void main(String[] args) {
// 람다식을 사용
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " - Count: " + i);
}
});
// 실행
thread1.start();
}
}
결과.
주요 메서드와 개념
- start(): 쓰레드를 시작하여 run() 메서드를 호출
- run(): 쓰레드가 실행할 작업을 정의
- sleep(): 쓰레드 실행을 일시 중지
- join(): 현재 쓰레드가 종료될 때까지 대기
- isAlive(): 쓰레드가 실행 중인지 확인
실행 결과
쓰레드 실행 순서는 JVM의 스케줄링에 따라 달라질 수 있다. 따라서 출력 순서는 예측할 수 없으며, 이를 통해 자바가 비동기적으로 쓰레드를 처리하는 방식을 확인할 수 있다.
끝으로..
- 쓰레드는 자원 공유와 동기화 문제가 발생할 수 있으므로, synchronized 키워드를 사용해 동기화를 관리해야 한다.
- 멀티쓰레딩 사용 시 과도한 쓰레드 생성은 성능 저하를 초래할 수 있다.
'JAVA' 카테고리의 다른 글
JAVA - JAVA에서 가비지 컬렉션(GC)이란 무엇일까? (0) | 2024.12.02 |
---|---|
JAVA - JAVA에서 제네릭이란 무엇일까? (0) | 2024.12.01 |
JAVA - JAVA에서 접근 제어자란 무엇일까? (public / private / protected / default) (1) | 2024.11.30 |
JAVA - JAVA에서 컬렉션 프레임워크란 무엇일까? (0) | 2024.11.28 |
JAVA - JAVA에서 메서드 오버로딩과 오버라이딩의 차이점은 무엇일까? (0) | 2024.11.27 |