hanker

JAVA - JAVA에서 쓰레드란 무엇이며, 어떻게 생성할까? 본문

JAVA

JAVA - JAVA에서 쓰레드란 무엇이며, 어떻게 생성할까?

hanker 2024. 12. 3. 00:00
반응형

Java에서 쓰레드(Thread)는 하나의 프로세스 내에서 실행되는 독립적인 실행 흐름을 말한다.

자바에서는 멀티쓰레딩을 지원하여, 하나의 프로그램이 동시에 여러 작업을 병렬로 처리할 수 있도록 해준다.

멀티쓰레딩은 CPU 활용을 극대화하고, 프로그램의 응답성을 개선하며, 작업을 효율적으로 처리할 수 있도록 도와준다.

 

쓰레드는 Thread 클래스 또는 Runnable 인터페이스를 사용하여 생성할 수 있습니다.

 


쓰레드 생성 방법

 

방법 1: Thread 클래스를 상속하여 쓰레드 생성

 

Thread 클래스를 상속하고, run() 메서드를 오버라이드하여 실행할 작업을 정의한다.

public class MainEx {

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

        thread1.start(); // 쓰레드 실행
        thread2.start();
    }

}

// Thread 클래스를 상속하여 쓰레드 생성
class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " - Count: " + i);
        }
    }
}

결과.

start() 메서드를 호출하면 새로운 쓰레드가 시작되고, run() 메서드가 실행된다.

 

 

방법 2: Runnable 인터페이스를 구현하여 쓰레드 생성

 

Runnable 인터페이스를 구현하고, 이를 Thread 객체에 전달하여 쓰레드를 생성한다.

public class MainEx {

    public static void main(String[] args) {
        MyRunnable runnable = new MyRunnable();
        Thread thread1 = new Thread(runnable);
        Thread thread2 = new Thread(runnable);

        thread1.start(); // 쓰레드 실행
        thread2.start();
    }

}

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

결과.

Thread 생성자에 Runnable 객체를 전달하면 쓰레드 실행이 가능하며 Runnable 인터페이스를 사용하면 다중 상속 문제를 피하기 위해 유용하다.

 

 

방법 3: 익명 클래스 또는 람다식 사용

 

익명 클래스를 사용하거나, 자바 8 이상의 경우 람다식을 사용하여 간결하게 쓰레드를 생성할 수 있다.

public class MainEx {

    public static void main(String[] args) {
        // 람다식을 사용
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println(Thread.currentThread().getName() + " - Count: " + i);
            }
        });

        // 실행
        thread1.start();
    }

}

 

결과.

 

 


주요 메서드와 개념

 

- start(): 쓰레드를 시작하여 run() 메서드를 호출

 

- run(): 쓰레드가 실행할 작업을 정의

 

- sleep(): 쓰레드 실행을 일시 중지

 

- join(): 현재 쓰레드가 종료될 때까지 대기

 

- isAlive(): 쓰레드가 실행 중인지 확인

 

 


실행 결과

 

쓰레드 실행 순서는 JVM의 스케줄링에 따라 달라질 수 있다. 따라서 출력 순서는 예측할 수 없으며, 이를 통해 자바가 비동기적으로 쓰레드를 처리하는 방식을 확인할 수 있다.

 

 

끝으로..

  • 쓰레드는 자원 공유와 동기화 문제가 발생할 수 있으므로, synchronized 키워드를 사용해 동기화를 관리해야 한다.
  • 멀티쓰레딩 사용 시 과도한 쓰레드 생성은 성능 저하를 초래할 수 있다.
반응형