[Java] 스레드 구현과 실행하는 방법 2가지: Runnable 인터페이스, start(), run() 알아보기

김하밍·2024년 3월 16일
0

Java

목록 보기
34/46
post-thumbnail

Thread 클래스로부터 작업 스레드 객체를 직접 생성하는 방법:

java.lang.Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면 Runnable을 매개값으로 갖는 생성자를 호출해야 합니다.

Thread thread = new Thread(Runnable target);

Runnable

  • 작업 스레드가 실행할 수 있는 코드를 가지고 있는 객체입니다.
  • 인터페이스 타입이기 때문에 구현 객체를 만들어 대입해야 합니다.
  • Runnable 안에는 run() 메소드가 정의되어 있는데, 구현 클래스에서 재정의하여 작업 스레드가 실행할 코드를 작성해야 합니다.
  • 코드를 좀 더 절약하기 위해 Thread 생성자를 호출할 때 Runnable 익명 객체를 매개값으로 사용할 수 있습니다. (더 많이 사용되는 방법)

Thread 클래스를 확장하여 스레드를 생성하고 실행하는 방법:

  1. 스레드를 생성하기 위해서는 보통 Thread 클래스를 상속받아 새로운 클래스를 작성하고, run() 메소드를 오버라이딩하여 스레드가 실행할 작업을 정의합니다.

  2. 스레드를 시작하기 위해서는 start() 메소드를 호출해야 합니다. start() 메소드는 새로운 스레드를 생성하고, 해당 스레드에서 run() 메소드를 실행합니다. 직접 run() 메소드를 호출하는 것이 아니라 start() 메소드를 호출해야한 Java Virtual Machine 이 스레드를 적절히 처리하고 동작시킬 수 있습니다.


재정의한 run() 이 아닌 start() 를 호출하는 이유:

생성된 스레드 객체의 start() 메소드를 호출하면, JVM은 새로운 스레드를 생성하고 해당 스레드의 run() 메소드를 실행하게 됩니다.
(순차적으로 일어나는 일, 동시 X)

만약 직접 run() 메소드를 호출하면?

단순히 현재 스레드에서 해당 객체의 run() 메소드가 실행될 뿐, 새로운 스레드가 생성되지 않습니다. 따라서 스레드를 병렬로 실행하기 위해서는 start() 메소드를 호출해야 합니다.


참고
Blog - 쓰레드 (Thread) - 구현

profile
나만의 언어로 기록하며 성장하기 !

0개의 댓글