울음참고 개발공부
728x90

 

 

 

thread run()과 tnread start()의 차이

 

 

run() 메서드와 start() 메서드는 Java 에서 멀티스레딩을 구현하는데 사용되는 메서드입니다.

 

 

 

run() 메서드

 

  • run() 메서드는 Thread 클래스 또는 Runnable 인터페이스를 구현한 클래스에서 오버라이드하여 스레드가 실행할 코드를 정의함
  • 일반적인 메서드 처럼 직접 호출이 가능함 
    • 이렇게 호출하는 경우에는 단순히 해당 메서드를 실행하는 것이며, 멀티스레딩을 활용하는 것이 아님
    • 따라서 run() 메서드를 직접 호출하는 것은 일반적으로 스레드를 생성하여 별도로 생성하는 것보다 성능면에서 이점이 없다!!
  • 스레드를 생성하고 실행하기 위해서는 start() 메서드를 사용해야함

 

 

 

start() 메서드

 

  • start() 메서드는 Thread 클래스를 상속한 클래스의 인스턴스에서 호출되면, 새로운 스레드를 생성하고 해당 스레드에서 run() 메서드를 실행함
  • start() 메서드는 멀티스레딩을 가능케 함
    • 스레드를 생성하고 병렬적으로 실행하기 위해 start() 메서드를 사용해야 함
  • 내부적으로 JVM(Jave Virtual Machine) 에 의해 스레드 스케줄링을 처리하고, 해당 스레드가 CPU 시간을 할당받아 run() 메서드를 실행하게 함

 

 

 

# 예시

 

// Thread 클래스를 상속하여 스레드 구현하기
public class MyThread extends Thread {
    @Override
    public void run() {
        // 스레드가 실행할 코드 작성
    }
}

// Runnable 인터페이스를 구현하여 스레드 구현하기
public class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 스레드가 실행할 코드 작성
    }
}

public static void main(String[] args) {
    // 스레드를 생성하고 실행하기
    MyThread thread1 = new MyThread();
    thread1.start(); // 스레드 실행

    MyRunnable runnable = new MyRunnable();
    Thread thread2 = new Thread(runnable);
    thread2.start(); // 스레드 실행
}

 

 

멀티스레딩을 구현하고 싶다면 start() 메서드를 사용하여 스레드를 실행시키는 것이 중요합니다.
run() 메서드는 직접 호출할 경우에는 멀티스레딩이 아닌 단일 스레드에서 실행되는 것에 유의해야 합니다.

 

 

 


 

 

스레드를 생성해야하는 상황 ? 

 

 

계속 스레드스레드 거렸는데 결국 개발을 하게되면 정확히 어떤 시점에 사용하는걸까?!

해당 파트는 질문리스트에 있는 것이아닌, 내가 궁금해서 적어두는 부분이다 

 

 

스레드는 다양한 상황에서 사용될 수 있으며, 프로그램의 목적과 요구사항에 따라 적절하게 스레드를 생성하여 사용한다.

 

예를 들어 쇼핑몰 사이트를 웹개발 한다고 생각해보자

 

  • 동시성 처리가 필요한 경우
    • 많은 사용자가 동시에 쇼핑몰에 접속하고 여러 작업(상품 조회, 장바구리 처리, 주문 등)을 동시해 수행해야하는 경우에 각 클라이언트 요청마다 스레드를 생성하여 동시에 처리할 수 있음
  • 백그라운드 작업이 필요한 경우
    • 쇼핑몰 시스템은 백그라운드에서 주기적으로 데이터를 처리해야하는 경우가 많음
    • 재고 관리, 주문 상태 갱신, 이메일 발송 등은 주기적으로 백그라운드에서 수행되어야하는데 이러한 작업을 스레드로 구현하여 주기적으로 실행하게 할 수 있음
  • 비동기 작업이 필요한 경우
    • 사용자가 어떤 요청을 하고 해당 요청에 대한 결과를 기다리는 동안, 다른 작업을 처리해야하는 경우에도 스레드를 활용할 수 있음
    • 예를 들어 주문 처리시 주문상태를 업데이터하는 작업은 비동기적으로 처리하고 사용자는 다른 작업을 수행하도록 할 수 있음
  • 반응성 향상 목적
    • 사용자가 어떤 화면에서 어떤 작업을 수행하는 동안 해당 작업이 끝날 때까지 화면이 멈추는 것을 방지하기 위해, 긴 작업을 별도의 스레드에서 처리하고 사용자와 상호작용할 수 있도록 할 수 있음
  • 데이터 동기화
    • 여러 스레드가 동시에 공유 자원에 접근해야하는 경우, 데이터의 무결성을 보장하기 위해 동기화를 해야함

 


 

이러한 상황에서 스레드를 생성하는 방법은 Thread 클래스를 상속하거나 Runnable 인터페이스를 구현하여 스레드를 생성할 수있다

 

 

# 스레드를 만드는 방법 참고 

 

데몬 스레드란? / 스레드를 만드는 방법

데몬 스레드(Demon thread) 컴퓨터 프로세스 내의 백그라운드에서 싱행되는 스레드 주로 백그라운드 작업을 처리하거나 다른 스레드들을 돕는 역할 데몬 스레드는 일반 스레드와 다르게, 해당 프로

megak.tistory.com

 

 

 

* Java 에서는 Executor Framework 를 사용하여 스레드 풀을 생성하고 스레드 관리를 더 편리하게 할 수 있음

 

728x90
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!