자바 스레드(Thread)와 멀티 스레드(Java Multithreading)
자바 프로그래밍에서 가장 중요한 기능 중에 하나가 바로 Multithreading이다. 그만큼 코딩 과정에서 많이 사용하는 기능이자 멀티스레드를 어떻게 사용하느냐에 따라서 프로그램의 효율성도 달라진다.
# 멀티 쓰레드와 멀티 프로세스
우선 멀티 쓰레드와스레드와 멀티 프로세스에 대해서 간략하게 확인하고 가자. 멀티 스레드와 멀티 프로세스에 대해서 혼란스러워하는 경우가 있는데 둘은 다른 기능을 의미한다. 멀티 스레드는 하나의 프로세스에서 여러 개의 작업을 하도록 해주는 기능이며, 멀티 프로세스는 여러 개의 프로세스를 사용하여 병렬적 일 처리를 할 수 있게끔 해주는 기능을 의미한다. 아래의 그림을 참고하면 이해하기 훨씬 쉬울 것이다.
프로세스 안에 다중 스레드가 존재한다.
그림에서와 같이 프로세스 안에는 다중 스레드를 구성하여 프로그램 작업 설정이 가능하다.
이것이 멀티 프로세스와 멀티 쓰레드의 차이점이다.
#Multithreading
프로세스는 일반적으로 하나의 일을 수행하고 그다음 일을 수행한다. 한마디로 프로세서는 한 가지 일을 수행하는 게 기본 작업 방식인 셈이다. 하지만 멀티 스레드를 사용함으로써 여러 가지 일을 동시에 작업이 가능하다. 동시에 작업하는 것처럼 보이지만 우선순위를 적용하여 동시 다발적으로 작업이 진행되는 것처럼 보이게 만드는 것이다. 그러니까 실제로는 다중 스레드의 우선순위에 맞추어 한 가지 일씩 차례대로 작업 수행이 이루어지지만 개발자나 프로그램 사용자가 느끼기에는 동시에 작업이 이루어지는 것처럼 느낄 수 있다. 또한 산출해야 될 결괏값이 한 가지 계산이나 작업으로 이루어지지 않을 경우 멀티 스레드를 사용함으로써 보다 더 효율적인 결괏값 산출이 가능하다. 따라서 개발하고자 하는 프로그램에 따라서 멀티 스레드를 이용하는 것이 시간적 효율성이 높을 수도 있지만 반대로 다중 스레드를 굳이 사용하지 않아도 되는 경우도 있다.
# Thread Life Cycle
Thread는 다섯가지 단계로 작업이 이루어진다.
아래는 다섯가지 단계에 대한 설명이다.
- New : Thread 생성자라고도 불리는 기능이며, Start() 메서드 이전에 만든 Thread가 새로 생성된 Thread에 해당한다.
- Runnable : 새로 생성된 Thread가 작동을 시작할 수 있는 단계를 의미한다.
- Running : 개발자가 지정한 Thread 순서에 따라 작동된다.
- Non-Runnable(Blocked): Thread가 아직 남아 있지만, 작동은 되지 않는 단계를 의미한다.
- Terminated: Thread가 없어지는 단계를 의미하며, run() 메서드가 잘 작동하여 원하는 결괏값을 산출하고 제대로 끝이 났을 때 Thread는 Terminated 된다. 또는 코드 에러로 작동이 잘 되지 않았을 경우에도 Thread는 Terminated 될 수 있다.
Thread는 위와 같이 5단계로 나뉘어 생성되고 작업을 수행하고 사라지는 Life Cycle를 가지고 있다.
이러한 Thread 특징을 기반으로 MultiThreading 구성이 가능하다
# In conclusion, 3줄 요약
1. 쓰레드와 멀티 스레드는 자바 프로그래밍에서 중요하다.
2. 멀티 프로세스와 멀티 스레드는 다르다.
3. 쓰레드의 Life Cycle를 이해하고 MultiThreading 사용이 가능하다.
연관된 글:
참고:
'개발 > Java' 카테고리의 다른 글
[JAVA] Lombok 어노테이션 (0) | 2023.04.29 |
---|---|
[Java] Interface (0) | 2023.04.01 |
[Java] 메소드 참조(method reference) (0) | 2023.03.20 |
[JAVA] Lambda (0) | 2023.03.20 |
[Java] 삼항 연산자 (0) | 2023.03.19 |