일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- analytics4
- docker
- git
- group by
- top
- 차이점
- 명령어
- Python
- Javascript
- API
- 오블완
- IntelliJ
- mssql
- SQL
- network
- 티스토리챌린지
- rsync
- PostgreSQL
- DBMS
- 리눅스
- 자바
- oracle
- Linux
- MongoDB
- spring
- JPA
- MariaDB
- mysql
- 트랜잭션
- java
- 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 - 컴파일타임(Compile Time)과 런타임(Run Time)이 뭘까? (0) | 2024.12.05 |
---|---|
Java - Java Servlet 이란? (0) | 2024.12.04 |
JAVA - JAVA에서 가비지 컬렉션(GC)이란 무엇일까? (0) | 2024.12.02 |
JAVA - JAVA에서 제네릭이란 무엇일까? (0) | 2024.12.01 |
JAVA - JAVA에서 접근 제어자란 무엇일까? (public / private / protected / default) (1) | 2024.11.30 |