본문 바로가기
BackEnd/Java

[Java] 쓰레드 Thread

by summer_light 2021. 8. 1.

쓰레드 Thread

쓰레드를 이해하려면 프로세스에 대해 알아야 한다.

간단히 말해 "프로세스"란, 실행중인 프로그램이다. 

 

이 프로세스는 보통 하나의 루틴(프로그램 처리 경로)을 가지고 있다.

이 루틴은 직렬적인데, 즉 어떠한 일을 수행할 때 정해진 순서대로 일을 처리한다는 의미이다. 

상황에 따라 순서가 필요 없는 일들이 있을 때 분리해서 동시에 처리하는 게 더 효율적일 때가 있다. 

이 때 자바에서 사용할 수 있는 것이 쓰레드이다. 쓰레드를 이용하면 하나의 프로세스에서도 병렬적으로 처리, 즉 여러 개의 처리 루틴을 가질 수 있게 된다.

 

자바에서는 쓰레드도 하나의 객체로 정의한다. 쓰레드는 특이하게 main메소드 역할을 run메소드가 대신한다. 

 

단순 반복의 코드를 실행할 때도 여러 개의 쓰레드를 만들어서 분리 시킨 뒤 결과 데이터를 받아 합치면 그만큼 시간을 절약할 수 있다. 여러 개의 프로세스를 띄워 실행하려면 각각 메모리를 할당해 줘야 하는데 반해 쓰레드를 하나 추가하면 더 적은 메모리를 점유하게 된다. 어떤 작업을 할 때 단일 쓰레드로 실행하는 것보다는 다중 쓰레드로 실행하는 것이 더 시간이 적게 걸린다.

 

※ 참고

쓰레드를 시작하는 메소드는 start()

쓰레드가 시작하면 수행되는 메소드는 run()

 

 

 


쓰레드 생성 방법

쓰레드 생성 방법에는 두 가지가 있다.

 

  1. Thread 클래스를 상속받기
    • Runnable 인터페이스에 비해 많은 메소드를 포함 (sleep 메소드 등)
    • Thread 클래스의 run메소드를 오버라이딩하여 사용
    • 객체 추가 없이 start() 메소드를 바로 호출할 수 있다.  
  2. Runnable 인터페이스 구현하기
    • Runnable로 구현한 클래스는 쓰레드로 바로 시작할 수 없다.
    • Thread 클래스의 생성자에 해당 객체를 추가하여 시작해야 한다.

댓글