자바 개발을 하다보면 우리는 스레드(Thread)라는 단어를 많이 듣게 될것이다.
싱글 스레드, 멀티 스레드, 비동기 스레드 등등 그렇다면 이 스레드란 무엇일까?
스레드란?
- 스레드는 어떠한 프로세스내에서 실제로 작업이 실행 되는 하나의 주체( 또는 단위)이다.
- 프로그램 또는 프로세스가 실행 되기 위해서는 하나 이상의 스레드가 있어야 한다.
여담이지만 예전에 SNS에서 컴퓨터 용어를 쉽게 설명해주는 짤에서 코어란 일꾼이며 스레드는 일꾼의 손의 갯수로 비유를 했던걸 본 기억이 있다.
다시 본문으로 돌아와 이번 포스팅의 주제인 멀티 스레드에 대해서 작성을 해보고자 한다.
멀티 스레드란?
- 특정 프로세스에서 두개 이상의 스레드가 동시에 작업을 하는것이다.
- 각 스레드가 자신이 속한 프로세스의 메모리를 공유
Java에서 멀티 스레드 구현
- java에서는 멀티 스레드를 구현하는 방식이 두가지가 있다.
- Thread 클래스를 이용한 구현
- Thread 클래스는 스레드 생성을 위해 java에서 미리 구현해둔 클래스이다.
- Thread 클래스를 상속 받으면 run 메소드를 구현 해야한다.'
- 내부적으로 Runnable 인터페이스를 상속 받고 있다.
- Runnable 인터페이스를 이용한 구현
- run 메소드 1개만을 가지는 함수형 인터페이스
- 람다 형식으로도 사용이 가능
- Thread 클래스에 비해 자원 소비량이 적음
이번 포스팅에서는 두번째 방법인 Runnable 인터페이스를 이용한 구현을 포스팅하고자 한다.
1. Runnable 인터페이스 구현
public class SendMessageThread implements Runnable{
@Override
public void run(){
try{
// 메세지 발송 로직
...
}catch(Exception e){
...
}
}
}
2. 멀티 스레드 실행
public ThreadTestMain {
public static void main(String[] args) {
Runnable sendMessage = new SendMessageThread();
Thread subTread = new Thread(sendMessage);
subTread.run();
}
}
위 코드를 실행 시키게 되면 메인 스레드에서 메세지 발송 스레드가 생성 되는것을 볼 수 있습니다.
테스트 코드는 하나의 서브 스레드를 생성을 했을 뿐 실제로 작업을 하다보면 여러개의 스레드가 필요할 때가 생깁니다.
이렇게 스레드를 계속해서 생성을 하게 된다면 결국 성능 저하의 문제가 발생하게 됩니다.
이러한 문제를 해결하기 위해서 스레드 풀 이라는 기법을 사용하게 되는데 이는 다음 포스팅에서 다뤄보도록 하겠습니다.
부족하지만 글을 읽어 주셔서 감사합니다.
참고
https://mangkyu.tistory.com/258
https://math-coding.tistory.com/171
'Spring' 카테고리의 다른 글
Object Storage 이미지 출력 (0) | 2023.06.09 |
---|---|
@Asnyc를 이용한 멀티 스레드 (0) | 2023.06.08 |
멀티 스레드 환경을 위한 스레드 풀 (Thread pool) - ThreadPoolTaskExecutor (0) | 2023.06.06 |
MyBatis (0) | 2023.06.04 |
jdbc와 jdbcTemplate (0) | 2022.10.21 |