JAVA/포스팅

자바 쓰레드(Thread)

짜집퍼박사(짜박) 2023. 11. 21. 23:47

자바에서 쓰레드(Thread)는 동시에 여러 작업을 수행할 수 있도록 하는 프로그래밍 단위입니다. 쓰레드를 사용하면 여러 작업을 동시에 수행하여 프로그램의 성능을 향상시킬 수 있습니다. 다음은 자바에서 쓰레드를 다루는 기본적인 내용에 대한 설명입니다.

 

1. 쓰레드 생성 방법

자바에서는 보통 두 가지 방법으로 쓰레드를 생성할 수 있습니다.

 

1.1 Thread 클래스 상속

class MyThread extends Thread {
    public void run() {
        // 쓰레드가 실행할 작업 정의
    }
}

// 사용 예제
MyThread myThread = new MyThread();
myThread.start(); // 쓰레드 실행

 

1.2 Runnable 인터페이스 구현

class MyRunnable implements Runnable {
    public void run() {
        // 쓰레드가 실행할 작업 정의
    }
}

// 사용 예제
Thread myThread = new Thread(new MyRunnable());
myThread.start(); // 쓰레드 실행

 

2. run 메서드

- 모든 쓰레드는 run 메서드를 재정의하여 실행할 작업을 정의합니다.
- Thread 클래스를 상속한 경우에는 run 메서드를 직접 구현하고, Runnable 인터페이스를 구현한 경우에는 run 메서드를 구현한 객체를 Thread에 전달합니다.

 

3. start 메서드

- start 메서드를 호출하면, 내부적으로 run 메서드가 새로운 스레드에서 실행됩니다.
- start 메서드를 직접 호출하면 단순히 현재 스레드에서 run 메서드가 실행되기 때문에, start 메서드를 사용해야 실제 다중 쓰레딩이 이뤄집니다.

 

4. 쓰레드 라이프사이클

쓰레드는 다음과 같은 상태를 가지며 라이프사이클을 갖습니다.

 

- New (새로운) : 쓰레드가 생성되었지만 start 메서드가 호출되지 않은 상태입니다.
- Runnable (실행 가능) : start 메서드가 호출되어 쓰레드가 실행 대기 상태에 있는 상태입니다.
- Blocked (차단된) : 다른 쓰레드에 의해 잠겨진 상태로, 특정 조건이 충족될 때까지 기다리는 상태입니다.
- Waiting (대기 중) : 다른 쓰레드가 특정 조건을 충족시킬 때까지 대기하는 상태입니다.
- Timed Waiting (제한된 대기 중) : 대기 시간이 지정된 상태로, 일정 시간이 지나면 다시 실행 가능 상태로 돌아갑니다.
- Terminated (종료됨) : 쓰레드가 실행을 마친 상태입니다.

 

5. 동기화 (Synchronization)

여러 쓰레드가 공유된 자원에 동시에 접근할 때, 데이터 일관성을 유지하기 위해 동기화가 필요합니다. 자바에서는 synchronized 키워드나 java.util.concurrent 패키지의 동기화 메커니즘을 활용하여 동기화를 구현할 수 있습니다.

 

6. 스레드 우선순위

쓰레드에는 우선순위(priority)가 있으며, 높은 우선순위를 가진 쓰레드는 낮은 우선순위를 가진 쓰레드보다 CPU 자원을 더 많이 할당받습니다. 하지만, 우선순위를 지정하는 것은 그다지 신뢰성 있는 방법이 아니므로 주의가 필요합니다.

myThread.setPriority(Thread.MAX_PRIORITY); // 최대 우선순위
myThread.setPriority(Thread.MIN_PRIORITY); // 최소 우선순위

 

7. 쓰레드 그룹

쓰레드를 그룹으로 묶어서 관리할 수 있습니다. 이를 통해 전체 그룹에 속한 쓰레드들을 일괄적으로 관리하고 조작할 수 있습니다.

ThreadGroup group = new ThreadGroup("MyThreadGroup");
Thread myThread = new Thread(group, new MyRunnable());

 

자바에서는 이 외에도 여러가지 쓰레드 관련 기능과 클래스를 제공하고 있습니다. 다중 쓰레딩은 복잡한 개념이므로 주의깊게 사용해야 합니다.

 

With ChatGPT

'JAVA > 포스팅' 카테고리의 다른 글

자바 쓰레드 start()와 run()  (0) 2023.11.21
자바 쓰레드의 구현과 실행  (0) 2023.11.21
자바 애너테이션 타입 정의하기  (0) 2023.11.21
자바 메타 애너테이션  (0) 2023.11.21
자바 표준 애너테이션  (0) 2023.11.21