>  기사  >  Java  >  Java의 진정한 멀티스레딩에 `Thread.start()`가 필수적인 이유는 무엇입니까?

Java의 진정한 멀티스레딩에 `Thread.start()`가 필수적인 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-15 09:15:17270검색

Why is `Thread.start()` essential for true multithreading in Java?

Thread.start()와 Thread.run()의 차이점 이해

Java에서 멀티스레딩으로 작업할 때 프로그래머는 두 가지 핵심을 접하게 됩니다. 메소드: Thread.start() 및 Thread.run(). 이름에서 유사한 기능을 암시할 수 있지만 목적은 분명히 다릅니다.

이러한 메서드의 기능은 무엇입니까?

Thread.start():

  • 새 스레드를 초기화하고 별도의 스레드에서 run() 메서드를 실행합니다. 실행.
  • 시스템 자원을 할당하고 스레드의 실행 환경을 설정합니다.
  • 스레드 스케줄링 및 실행을 관리하기 위해 제어권이 JVM으로 이전됩니다.

Thread.run():

  • run()을 직접 호출합니다. 현재 스레드 내의 메서드입니다.
  • 새 스레드를 생성하지 않습니다. 대신 현재 실행 스레드에서 코드를 실행합니다.
  • 스레드 관리를 위해 시스템 리소스가 할당되지 않습니다.

Thread.run을 호출하면 안 되는 이유 ()?

Thread.run()이 run() 메서드도 실행한다면 왜 대신에 이것을 간단히 호출하면 안 될까요? Thread.start()? 그 이유는 멀티스레딩이 제공하는 격리성과 독립적 실행에 있습니다.

Thread.run()을 호출하면 별도의 스레드가 아닌 현재 스레드에서 코드가 실행됩니다. 이는 run() 메서드의 모든 코드가 여전히 현재 스레드의 리소스와 상호 작용하고 영향을 미친다는 것을 의미합니다. 이는 작업의 동시 실행을 허용하는 멀티스레딩의 의도된 목적이 아닙니다.

차이점을 보여주는 예:

다음을 고려하십시오. 코드:

public class ThreadExample {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> System.out.println("Thread 1"));
        Thread t2 = new Thread(() -> System.out.println("Thread 2"));

        // Here, we call Thread.start() and Thread.run():
        t1.start();  // Starts Thread 1 in a separate thread
        t2.run();    // Executes Thread 2 in the current thread

        System.out.println("Main Thread");
    }
}

출력:

Thread 1
Main Thread

t1에서 Thread.start()를 호출하면 새 스레드가 생성되고 해당 스레드에서 run() 메서드가 실행됩니다. , "스레드 1"을 인쇄할 수 있습니다. 반면에 t2에서 Thread.run()을 호출하면 새 스레드 생성을 우회하여 현재(즉, 기본) 스레드에서 run() 메서드가 실행됩니다. 이로 인해 "스레드 2"는 별도의 스레드에서 실행되지 않으므로 인쇄되지 않습니다.

위 내용은 Java의 진정한 멀티스레딩에 `Thread.start()`가 필수적인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.