[java] 자바 멀티스레드 프로그래밍

자바는 멀티스레드 프로그래밍을 지원하는 강력한 언어입니다. 멀티스레드를 사용하여 여러 작업을 동시에 처리할 수 있으며, 성능과 반응성을 향상시킬 수 있습니다.

스레드(Thread)란?

스레드는 동시에 실행될 수 있는 프로세스 내의 독립적인 실행 흐름입니다. 각 스레드는 자체적인 스택 메모리를 가지며, 동일한 프로세스 내의 다른 스레드와 공유하는 힙 메모리에 접근할 수 있습니다. 자바에서는 Thread 클래스를 사용하여 스레드를 생성하고 제어할 수 있습니다.

스레드 생성하기

자바에서 스레드를 생성하는 가장 간단한 방법은 Thread 클래스를 상속하는 것입니다. 다음은 스레드를 생성하는 예제입니다:

class MyThread extends Thread {
    public void run() {
        // 스레드로 실행할 작업 내용
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start(); // 스레드 시작
    }
}

위의 예제에서 MyThread 클래스는 Thread 클래스를 상속하고 run 메서드를 재정의합니다. run 메서드에는 스레드로 실행할 작업 내용을 작성하면 됩니다. Main 클래스에서 MyThread 객체를 생성하고 start 메서드를 호출하여 스레드를 시작합니다.

스레드 동기화하기

여러 스레드가 동일한 자원에 동시에 접근하면 문제가 발생할 수 있습니다. 이를 해결하기 위해 자바에서는 동기화 메커니즘을 제공합니다. 동기화를 위해 synchronized 키워드를 사용할 수 있습니다. 다음은 동기화를 적용한 예제입니다:

class Counter {
    private int count = 0;

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

    public int getCount() {
        return count;
    }
}

public class Main {
    public static void main(String[] args) {
        Counter counter = new Counter();

        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                counter.increment();
            }
        });

        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                counter.increment();
            }
        });

        thread1.start();
        thread2.start();

        try {
            thread1.join();
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Count: " + counter.getCount());
    }
}

위의 예제에서 Counter 클래스는 increment 메서드를 동기화하여 여러 스레드가 동시에 접근할 때 문제가 발생하지 않도록 합니다. Main 클래스에서 Counter 객체를 생성하고 두 개의 스레드에서 동시에 increment 메서드를 호출하고, 마지막으로 getCount 메서드로 결과를 출력합니다.

결론

자바 멀티스레드 프로그래밍은 병렬 처리와 성능 향상을 위해 매우 유용합니다. 스레드 생성, 동기화 등의 기본 개념과 사용법을 이해하면 멀티스레드 프로그래밍에 필요한 기초를 다질 수 있습니다.

참고 자료