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 인터페이스를 구현하여 스레드를 생성할 수있다
# 스레드를 만드는 방법 참고
* Java 에서는 Executor Framework 를 사용하여 스레드 풀을 생성하고 스레드 관리를 더 편리하게 할 수 있음
728x90
'3.multi-threading' 카테고리의 다른 글
sleep() vs wait() / notify() vs notifyAll() (0) | 2023.07.27 |
---|---|
스레드의 여러가지 상태 (0) | 2023.07.26 |
runnable과 callable의 차이는 ? (0) | 2023.07.25 |
데몬 스레드란? / 스레드를 만드는 방법 (0) | 2023.07.24 |
스레드와 프로세스의 차이 (0) | 2023.07.21 |