본문 바로가기
Spring

멀티 스레드 Runnable

by yang sing 2023. 6. 6.

자바 개발을 하다보면 우리는 스레드(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

 

[Java] Thread와 Runnable에 대한 이해 및 사용법

이번에는 자바 초기부터 멀티 쓰레드 기반의 동시성 프로그래밍을 위해 만들어졌던 Thread와 Runnable를 살펴보도록 하겠습니다. 1. Thread와 Runnable에 대한 이해 및 사용법 [ 쓰레드와 자바의 멀티 쓰

mangkyu.tistory.com

 

'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