[Java] Java 스레드 (Thread) 기본 개념 #20

소개

자바(Java)는 다양한 기능과 특징을 제공하는 객체지향 프로그래밍 언어로, 다중 작업을 지원하기 위해 Java 스레드(Thread)를 제공합니다. 스레드는 프로그램의 실행 흐름을 나타내는 작은 단위로, 병행성(concurrency)을 구현하는 데 사용됩니다. 이 블로그에서는 자바 스레드의 기본 개념에 대해 자세히 알아보겠습니다.

스레드의 정의

스레드는 프로세스 내에서 독립적으로 실행되는 가장 작은 단위입니다. 하나의 프로세스 안에는 여러 개의 스레드가 존재할 수 있으며, 각 스레드는 자체적인 코드를 실행하면서 동시에 작업을 수행할 수 있습니다.

자바 스레드 생성

자바에서는 두 가지 방법으로 스레드를 생성할 수 있습니다. 첫 번째는 Thread 클래스를 상속받는 방법이고, 두 번째는 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();

스레드의 생명주기

자바 스레드는 다양한 상태를 가지며, 생명주기를 따릅니다. 주요한 스레드의 상태는 다음과 같습니다.

  1. New (생성): 스레드 객체가 생성된 상태.
  2. Runnable (실행 대기): 스레드가 실행을 기다리는 상태.
  3. Blocked (차단): 특정 이벤트가 발생할 때까지 스레드가 대기하는 상태.
  4. Waiting (대기): 다른 스레드가 특정 작업을 완료할 때까지 대기하는 상태.
  5. Timed Waiting (일정 시간 동안 대기): 일정 시간 동안 대기하는 상태.
  6. Terminated (종료): 스레드가 실행을 마친 상태.

스레드 동기화

여러 스레드가 공유 자원에 접근할 때 데이터 일관성 문제가 발생할 수 있습니다. 이를 해결하기 위해 자바는 synchronized 키워드를 제공하여 특정 코드 블록이나 메서드에 대한 접근을 동기화할 수 있게 합니다.

class SharedResource {
    private int count = 0;

    public synchronized void increment() {
        // 동기화된 코드 작성
        count++;
    }
}

스레드 풀

스레드를 생성하고 제어하는 데에는 많은 자원이 소모됩니다. 이러한 자원 소모를 최소화하기 위해 자바에서는 스레드 풀을 사용할 수 있습니다. 스레드 풀은 미리 정해진 개수의 스레드를 생성하고 관리하여 작업을 처리하는 메커니즘입니다.

ExecutorService executorService = Executors.newFixedThreadPool(5);

// 작업 제출
executorService.submit(() -> {
    // 스레드에서 실행될 코드 작성
});

// 스레드 풀 종료
executorService.shutdown();

결론 Java 스레드

이 블로그에서는 자바 스레드의 기본 개념에 대해 간략히 살펴보았습니다. 스레드는 다중 작업을 지원하고 효율적으로 프로그램을 실행할 수 있게 해주는 중요한 개념 중 하나입니다. 스레드를 올바르게 활용하면 병행성을 향상시키고 성능을 향상시킬 수 있습니다. 다양한 스레드 관련 기술들을 학습하고 활용하여 프로그램을 더욱 효율적으로 작성할 수 있도록 노력해보세요.

[Java] Java 리스트 (List), 세트 (Set), 맵 (Map) 사용법 #19
[Java] Java 리스트 (List), 세트 (Set), 맵 (Map) 사용법 #19
[Java] Java 동기화 (Synchronization) #21
[Java] Java 동기화 (Synchronization) #21

Leave a Comment