본문 바로가기
Java/Java이론

쓰레드(Thread)

by P_eli 2023. 11. 21.
728x90
반응형

쓰레드(Thread)란?

쓰레드는 프로세스 내에서 독립적으로 실행되는 작은 실행 단위를 말합니다. 자바에서는 Thread 클래스를 통해 쓰레드를 생성하고 관리할 수 있습니다.

쓰레드 생성 방법

Thread 클래스 상속

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

public class Main {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
    }
}

 

Runnable 인터페이스 구현

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

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

 

예제: 간단한 두 쓰레드 동시 실행

class MyThread extends Thread {
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getId() + " Value " + i);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread thread1 = new MyThread();
        MyThread thread2 = new MyThread();

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

 

위 예제에서는 두 개의 쓰레드가 각각 0부터 4까지의 값을 출력합니다.

동기화(Synchronization)

쓰레드 간에 자원을 공유할 때 문제가 발생할 수 있습니다. 동기화를 통해 이를 해결할 수 있습니다.

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("Counter: " + counter.getCount());
    }
}

 

이 예제에서는 Counter 클래스를 사용하여 두 쓰레드가 공유하는 카운터를 안전하게 증가시키고 출력합니다.

728x90
반응형

'Java > Java이론' 카테고리의 다른 글

자바 데이터베이스 연동 (JDBC)  (0) 2023.11.27
쓰레드 풀(Thread Pool)  (1) 2023.11.21
자바 입출력 스트림(Java I/O Streams)  (0) 2023.11.10
자바 스트림(Stream)  (0) 2023.11.07
자바 람다식  (0) 2023.11.06