본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

스레드 구현과 실행 + 싱글쓰레드와 멀티쓰레드: start()와 run()

앞서 스레드에 대해 알아봤다.

프로세스는 공장이라면 스레드는 일꾼이라 생각하면 된다.

https://standout.tistory.com/498

 

프로세스/스레드 방식

프로세스: 공장 스레드: 일꾼 프로세스 방식 매번 새로운 프로세스를 생성하여 처리하는 방식 멀티태스킹을 지원하지만 메모리 사용량이 더 크고, 프로세스 간의 통신이 필요하기 때문에 오버

standout.tistory.com

https://standout.tistory.com/634

 

멀티 프로세스와 멀티 스레드

앞서 프로세스와 스레드에 대해 알아봤다, 필요하다면 다시 복습해보자. https://standout.tistory.com/498 프로세스/스레드 방식 프로세스 방식 매번 새로운 프로세스를 생성하여 처리하는 방식 멀티태

standout.tistory.com

 

 

 

스레드에는 메인스레드와 작업스레드가 있으며 

메인스레드는 프로그램이 시작되면 초기화하고 입력을 기다리는 역할을 수행하고,

작업스레드는 메인스레드 외 스레드로 일반적으로 메인스레드에 의해 생성되고 시작된다.

https://standout.tistory.com/284

 

Thread 메인스레드, 작업스레드

스레드 Thread 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미 멀티스레드는 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행하는 실행 방식 https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A

standout.tistory.com

 

 

 

스레드 구현과 실행 예시코드로 start()와 run()에 대해 이해해보자.

// ThreadExample.java
public class ThreadExample extends Thread { //`Thread` 클래스를 상속
    private String threadName;

    public ThreadExample(String name) {
        this.threadName = name;
    }

	// `run()` 메서드를 재정의하여 각 쓰레드가 실행될 때 수행할 작업을 정의
    public void run() {
        System.out.println("Thread " + threadName + " is running.");
        try {

            // 메시지를 출력한 후 2초 동안 대기한 다음 종료 메시지를 출력
            Thread.sleep(2000);

        } catch (InterruptedException e) {
            System.out.println("Thread " + threadName + " interrupted.");
        }
        System.out.println("Thread " + threadName + " exiting.");
    }

//`main` 함수
    public static void main(String[] args) {
	//`ThreadExample` 클래스의 두 인스턴스를 생성
        ThreadExample thread1 = new ThreadExample("Thread 1");
        ThreadExample thread2 = new ThreadExample("Thread 2");

        // `start()` 메서드를 호출하여 각각의 쓰레드를 시작
        thread1.start();
        thread2.start();
    }
}

 

 

 

두 개의 쓰레드가 서로 독립적으로 실행되기 때문에 
종료 메시지가 어떤 순서로 출력될지 정확히 예측할 수 없다.
종료 메시지는 실행 환경 및 운영 체제에 따라 다를 수 있다.

// Thread Thread 1 is running.
// Thread Thread 2 is running.
// Thread Thread 1 exiting.
// Thread Thread 2 exiting.