7월 18일 - 멀티스레드

Yullgiii·2024년 7월 18일
0
post-thumbnail

멀티스레딩

멀티스레딩은 하나의 프로세스 내에서 여러 스레드가 동시에 작업을 수행하는 것을 말한다. 자바에서는 Thread 클래스와 Runnable 인터페이스를 사용하여 스레드를 생성하고 제어할 수 있다.

스레드 생성 예제

// Thread 클래스를 상속받아 스레드 생성
class MyThread extends Thread {
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(getName() + " - " + i);
        }
    }
}

// Runnable 인터페이스를 구현하여 스레드 생성
class MyRunnable implements Runnable {
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " - " + i);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        // Thread 클래스를 상속받은 스레드 시작
        MyThread thread1 = new MyThread();
        thread1.start();

        // Runnable 인터페이스를 구현한 스레드 시작
        Thread thread2 = new Thread(new MyRunnable());
        thread2.start();
    }
}

동기화

동기화는 여러 스레드가 동시에 공유 자원에 접근할 때 발생할 수 있는 문제를 방지하기 위한 기술이다. 자바에서는 synchronized 키워드를 사용하여 동기화 블록을 지정할 수 있다.

동기화 예제

class Counter {
    private int count = 0;

    // 동기화 메서드
    public synchronized void increment() {
        count++;
    }

    public int getCount() {
        return count;
    }
}

class CounterThread extends Thread {
    private Counter counter;

    public CounterThread(Counter counter) {
        this.counter = counter;
    }

    public void run() {
        for (int i = 0; i < 1000; i++) {
            counter.increment();
        }
    }
}

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

        CounterThread thread1 = new CounterThread(counter);
        CounterThread thread2 = new CounterThread(counter);

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

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

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

동기화 블록

동기화 블록을 사용하면 메서드 전체가 아닌 특정 블록만 동기화할 수 있다. 이렇게 하면 성능을 향상시킬 수 있다.

class Counter {
    private int count = 0;

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

    public int getCount() {
        return count;
    }
}

So...

멀티스레딩은 성능 향상을 위해 중요한 기술이며, 자바에서는 Thread 클래스와 Runnable 인터페이스를 사용하여 스레드를 생성할 수 있다. 그러나 멀티스레딩 환경에서는 동기화 문제를 신경 써야 하며, 이를 위해 synchronized 키워드를 사용하여 동기화 블록을 지정할 수 있다. 동기화는 공유 자원의 일관성을 유지하고, 스레드 간의 충돌을 방지하는 데 필수적이다. 이번 TIL에서는 멀티스레딩과 동기화의 기본 개념과 자바에서의 구현 방법을 살펴보았다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글