프로그래밍 공부

JAVA 스레드 활용 메서드 본문

Programming/JAVA

JAVA 스레드 활용 메서드

khj1999 2024. 10. 22. 21:39

자바의 스레드 관련 메서드는 스레드를 생성, 실행, 대기, 종료 및 제어하는 데 사용된다.
아래는 자바에서 스레드와 관련된 주요 메서드들이다.

1. 스레드 생성 및 실행 관련 메서드

  • start()

    • 스레드를 시작하고 run() 메서드를 호출.

    • 스레드는 새 스레드에서 실행.

    • 사용 예시:

        Thread t = new Thread(() -> {
            System.out.println("스레드 실행 중");
        });
        t.start();
  • run()

    • 스레드가 시작될 때 호출되는 메서드.

    • Thread 클래스를 상속하거나 Runnable 인터페이스를 구현하여 재정의할 수 있다.

    • 사용 예시:

        public void run() {
            System.out.println("스레드 실행 중");
        }

2. 스레드 상태 관련 메서드

  • sleep(long millis)

    • 현재 실행 중인 스레드를 지정된 시간(밀리초) 동안 일시 정지.

    • 사용 예시:

        try {
            Thread.sleep(1000); // 1초 대기
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
  • join()

    • 현재 스레드가 호출한 다른 스레드가 종료될 때까지 대기.

    • 사용 예시:

        Thread t = new Thread(() -> {
            // 작업 수행
        });
        t.start();
        t.join(); // t 스레드가 종료될 때까지 대기
  • yield()

    • 현재 실행 중인 스레드를 일시 중지하고, 다른 스레드에게 실행할 기회를 제공.

    • JVM의 스케줄러에게 스레드가 일시 중지될 수 있음을 알리지만
      반드시 다른 스레드가 실행된다는 보장은 없다.

    • 사용 예시:

        public void run() {
            System.out.println("스레드가 실행 중입니다.");
            Thread.yield(); // 다른 스레드에게 실행 기회를 줌
            System.out.println("스레드가 다시 실행 중입니다.");
        }

3. 스레드 제어 관련 메서드

  • interrupt()

    • 다른 스레드를 중단할 때 사용합니다. 중단 요청을 통해 스레드가 중단되도록 유도.

    • 스레드가 대기 중일 경우, InterruptedException을 발생시킴.

    • 사용 예시:

        Thread t = new Thread(() -> {
            while (!Thread.currentThread().isInterrupted()) {
                // 작업 수행
            }
        });
        t.start();
        t.interrupt(); // 스레드에 중단 요청
  • isAlive()

    • 스레드가 현재 실행 중인지 여부를 확인합니다. 스레드가 시작된 후 종료되지 않았으면 true를 반환.

    • 사용 예시:

        if (t.isAlive()) {
            System.out.println("스레드가 실행 중입니다.");
        }

4. 스레드 우선순위 관련 메서드

  • setPriority(int newPriority)

    • 스레드의 우선순위를 설정. 우선순위 값은 Thread.MIN_PRIORITY (1)에서 Thread.MAX_PRIORITY (10) 사이여야 한다.

    • 사용 예시:

        t.setPriority(Thread.MAX_PRIORITY); // 최대 우선순위 설정
  • getPriority()

    • 현재 스레드의 우선순위를 반환.

    • 사용 예시:

        int priority = t.getPriority();
        System.out.println("스레드 우선순위: " + priority);

5. 스레드 그룹 관련 메서드

  • getThreadGroup()

    • 현재 스레드가 속한 스레드 그룹을 반환.

    • 사용 예시:

        ThreadGroup group = Thread.currentThread().getThreadGroup();
        System.out.println("스레드 그룹: " + group.getName());
      

6. 동시성 제어 관련 클래스 및 메서드

  • wait()

    • 현재 스레드를 대기 상태로 전환하고
      다른 스레드가 notify() 또는 notifyAll()을 호출할 때까지 대기.

    • 사용 예시:

        synchronized (this) {
            wait(); // 대기 상태로 전환
        }
      
  • notify()

    • 대기 중인 스레드 중 하나를 깨운다.

    • 사용 예시:

        synchronized (this) {
            notify(); // 대기 중인 스레드 하나를 깨움
        }
      
  • notifyAll()

    • 대기 중인 모든 스레드를 깨운다.

    • 사용 예시:

        synchronized (this) {
            notifyAll(); // 대기 중인 모든 스레드 깨움
        }
      
  • ReentrantLock

    • Java 5부터 제공되는 ReentrantLock 클래스는 더 많은 기능을 제공하는 동기화 메커니즘이다.

    • 사용 예시:

        ReentrantLock lock = new ReentrantLock();
        lock.lock();
        try {
            // 공유 자원에 대한 작업
        } finally {
            lock.unlock(); // 반드시 잠금을 해제해야 함
        }

결론

자바에서 스레드를 활용하는 데 필요한 다양한 메서드가 제공되며
이를 통해 멀티스레딩 환경에서의 작업을 효과적으로 관리할 수 있다.
스레드를 올바르게 제어하고 동기화하는 것은 안정적이고 효율적인 멀티스레딩 프로그래밍을 위해 매우 중요하다.

Comments