JAVA

Java.스레드(Thread)

calla1013 2025. 5. 24. 15:54

🚀 자바 스레드 완전 정복! 멀티스레드 개념부터 사용법, 동기화까지 쉽게 이해하기

안녕하세요! 오늘은 자바 프로그래밍에서 아주 중요한 스레드(Thread)에 대해 쉽고 자세하게 알아볼게요.
프로세스와 스레드의 차이, 멀티스레드의 장점부터, 자바에서 스레드를 만드는 방법과 동기화, 상태 제어까지 하나씩 차근차근 살펴봅시다!

1. 스레드와 프로세스, 이게 뭘까? 🤔

  • 프로세스(Process): 우리가 실행하는 프로그램 그 자체예요.
    컴퓨터 안에서 앱 하나가 돌아가는 걸 생각하면 쉬워요. 예를 들어, 웹 브라우저 하나가 실행되면 그것이 ‘프로세스’입니다.
    프로세스는 메모리 공간, 코드, 데이터, 그리고 스레드로 구성됩니다.
  • 스레드(Thread): 프로세스 내에서 실제 일을 하는 작은 작업 단위예요.
    회사에 비유하면, 프로세스가 회사라면 스레드는 그 회사에서 일하는 여러 직원들이죠.
    여러 직원이 동시에 일을 하니까 일이 더 빠르고 효율적으로 끝나겠죠? 이게 바로 멀티스레드(Multi-threading) 입니다.

2. 멀티스레드의 장점은? 🌟

멀티스레드를 쓰면, 여러 작업을 동시에 수행할 수 있어 프로그램 실행 속도가 빨라지고 효율이 좋아져요.
예를 들어, 음악을 들으면서 웹서핑을 하거나 다운로드를 받을 수 있는 것도 멀티스레드 덕분이죠!

3. 자바에서 스레드 만들기 - 두 가지 방법! 🛠️

방법 1: Thread 클래스를 상속받기

class MyThread extends Thread {
    public void run() {
        for(int i=0; i<5; i++) {
            System.out.println("Thread running: " + i);
            try { Thread.sleep(500); } catch (InterruptedException e) {}
        }
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        t1.start(); // run() 메서드 호출과 동시에 새 스레드 실행
    }
}

start() 메서드를 호출하면 새 스레드가 시작되고, run() 메서드 내부 코드가 실행됩니다.
sleep()은 스레드를 잠시 멈추게 하는 메서드로, CPU 자원 낭비를 줄여줘요.

방법 2: Runnable 인터페이스 구현하기

class MyRunnable implements Runnable {
    public void run() {
        for(int i=0; i<5; i++) {
            System.out.println("Runnable running: " + i);
            try { Thread.sleep(500); } catch (InterruptedException e) {}
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Thread t1 = new Thread(new MyRunnable());
        t1.start();
    }
}

Runnable은 자바에서 스레드 작업 코드를 작성할 때 많이 쓰는 방법입니다.
Thread 객체 생성 시 Runnable 구현체를 전달해서 사용합니다.

4. 스레드 동기화 - 안전하게 공유 자원 다루기 🔐

여러 스레드가 동시에 같은 데이터를 수정하면, 문제가 발생할 수 있어요. 이를 방지하려면 동기화(Synchronization)가 필요합니다!

public class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public int getCount() {
        return count;
    }
}

synchronized 키워드를 메서드나 블록에 붙이면, 한 번에 한 스레드만 접근 가능!
이렇게 하면 데이터가 꼬이는 걸 막을 수 있죠.

5. 스레드 상태와 제어 메서드 한눈에 보기 🧐

메서드 설명
start() 새 스레드를 시작하고, run() 호출
sleep() 일정 시간 동안 스레드 실행 일시 중지
wait() 스레드를 대기 상태로 전환(다른 스레드가 알릴 때까지 대기)
notify() 대기 중인 스레드 하나를 깨움
notifyAll() 대기 중인 모든 스레드를 깨움

6. 마치며 - 스레드 공부를 위한 팁 💡

  • 스레드는 어렵게 느껴질 수 있지만, 작은 예제를 자주 실행해보면 이해가 쉬워져요.
  • 멀티스레드 프로그램은 디버깅이 까다롭기 때문에, 차근차근 단계별로 실습하세요!
  • 공식 자바 문서와 다양한 튜토리얼을 참고하면 도움이 됩니다.

다음 포스팅에서는 JDBC도 다뤄볼게요. 감사합니다!

'JAVA' 카테고리의 다른 글

Java.자바 입출력 (File & Stream)  (0) 2025.05.24
Java.JDBC  (0) 2025.05.24
Java.예외처리  (1) 2025.05.24
Java.기본 API 클래스  (1) 2025.05.24
Java.상속과 인터페이스  (1) 2025.04.25