개발놀이터

스레드와 멀티스레드 본문

Java

스레드와 멀티스레드

마늘냄새폴폴 2022. 1. 10. 20:11

스레드

스레드를 알기전에 우리는 프로세스에 대해서 알아야한다.

 

프로세스는 무엇인가?

프로레스란 단순히 실행중인 프로그램이라고 할 수 있다. 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다. 이러한 프로세는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다.

 

그럼 스레드는 무엇인가?

스레드란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스는 한개 이상의 스레드가 존재하여 작업을 수행한다. 또한, 두개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 한다.

 

예를 들어

Controller - Service - Repository로 이어지는 로직을 하나의 프로세스라 하면 이 프로세스는 하나의 스레드가 할당되어 실행된다는 의미이다. 

 

 

그럼 이제 스레드의 생성과 실행에 대해서 알아보자

 

자바에서 스레드를 생성하는 방법에는 다음과 같이 두 가지 방법이 있다. 

 

1. Runnable 인터페이스를 구현하는 방법

2. Thread 클래스를 상속받는 방법

 

두 방법 모두 스레드를 통해 작업하고 싶은 내용을 run() 메서드에 작성하면 된다.

 

1. Runnable 인터페이스를 구현하는 방법

        Runnable thread = new Runnable() {
            @Override
            public void run() {
                //스레드가 실행할 로직
            }
        }

이 방법은 자바8 람다를 이용하면 더 간단하게 구현할 수 있다.

        Runnable thread = () -> {
            //스레드가 실행할 로직
        };

개인적으로는 람다를 이용한 스레드 생성을 주로 사용합니다. 상속해야 하는 귀찮음이 없어서 제일 깔끔하고 편한거같습니다. 

 

 

2. Thread 클래스를 상속받는 방법

class ThreadWithClass extends Thread {
    public void run() {
	//스레드가 실행할 로직
    }
}

 

 

<스레드 생성자>

출처 :&nbsp;https://raccoonjy.tistory.com/15

<스레드 메서드>

출처 :&nbsp;https://raccoonjy.tistory.com/15

 

<스레드의 종류>

스레드의 종류로는 멀티스레드 데몬스레드 등이 있다. 이에대해 알아보자

 

멀티스레드

일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행하게 된다. 하지만 멀티 스레드란 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미한다. 또한, 멀티 프로세스는 여러개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것을 의미한다.

 

멀티 스레드와 멀티 프로세스 모두 여러 흐름을 동시에 수행한다는 공통점을 가지고 있다. 멀티 프로세스는 각 프로세스가 독립적인 메모리를 가지고 별도로 실행되지만, 멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유한다는 점이 다르다.

 

멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유하므로, 시스템 자원의 낭비가 적다. 또한, 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋아진다.

 

데몬 스레드

데몬 스레드란 다른 일반 스레드의 작업을 돕는 보조적인 역할을 하는 스레드를 가르킨다. 따라서, 데몬 스레드는 일반 스레드가 모두 종료되면 더는 할 일이 없으므로, 데몬 스레드 역시 자동으로 종료된다.

 

데몬 스레드의 생성 방법과 실행 방법은 모두 일반 스레드와 같다. 하지만 실행하기 전에 setDeamon() 메소드를 호출하여 데몬 스레드로 설정하기만 하면 된다.

 

이러한 데몬 스레드는 일정 시간마다 자동으로 수행되는 저장 및 화면 갱신 등에 이용되고 있다.