Language/Java

[JAVA] Thread 활용법

검은 까마귀 2022. 1. 14. 13:24

 

모든 언어는 CS와 연결되어있다. 한가지를 뚜렷하게 알면 용어는 돌려쓰기 때문에 더 헷갈리지만, 연결되어있다고 생각하면 더 쉽다.

 

나는 이전 포스팅에서 Thread와 Process에 대해서 디테일 하게 알아보았다. (모른다면 읽어보고 JAVA의 Thread를 따라오자.)

2024.01.03 - [Computer Science/Operation System] - [OS] 프로세스 & 쓰레드(Process & Thread)

 

[OS] 프로세스 & 쓰레드(Process & Thread)

#개요 CS를 공부할때는 언어에 대해서 1차적인 고민을 해야한다. 우리는 PC를 사용할때 프로그램(Program)을 사용한다. 프로그램(Program)을 실행하여 원하는 동작을 구현하는데 우리는 이 단위를 프

blaj2938.tistory.com

 

다시 말하자면, 

 

Process는 CPU에 의해서 메모리에 올려져있는 Program을 이야기하며, 독립적인 메모리를 가져 독립적인 실행환경을 갖고 있다.

Thread는 Process안에 실행단위를 가지며 stack제외한 부분을 모두 공유한다. Process안에서 한개 이상의 Thread가 존재한다. 

 

# JAVA에서 Thread 환경

JAVA는 하나의 Process에 멀티 Thread를 지원한다. Main() Thread를 기준으로 추가로 Thread를 생성하여 멀티 스레딩환경을 만들 수 있다.

 

멀티 스레딩을 그렇다면 왜쓸까? 여러가지 이유가 있다.

  • 응답성 향상: 여러작업을 동시에 처리할 수 있다.(백그라운드 환경 제공)
  • 자원 공유: 여러 Thread에서 같은 자원에 동시에 접근이 가능

이렇게 이야기 하면 어렵긴 하다. 실제 예를 한가지를 들어보자.

 

웹 서버는 동시에 여러 클라이언트에게 요청을 받는다. 이 경우에 요청을 순차적으로 처리하면 가장 늦게 요청이 온 클라이언트의 응답시간이 매우 늦어질 것이다. 이를 타파하기 위한 기술적으로 멀티 Thread 환경을 생성해주는 것이다. 각 요청별로 Thread를 생성해서 요청을 처리한다.

 

실제로 업무 환경에서 하나의 어플리케이션 프로그램 즉, 프로세스에서 100명의 사용자가 채팅을 구현한적이 있는데 사용자가 몰리면서 순서가 다르게 채팅이 온 적이 있었다. (애초에 이걸 socket이 아닌 push 방식을 사용한 것이 문제지만....)

아무튼, 이를 해결하기 위해 Queue에 쌓여있는 채팅 메시지를 Thread를 하나 더 만들어서 실행시켰다.

이렇게 응답성 향상을 위해서 사용된다.

 

 

# JAVA에서 Thread 환경 만들기

이제는 왜 쓰는지, 이론을 알았고, JAVA 언어 자체의 특성을 알았으니 어떻게 사용하는지를 알아보겠다.

public static void main(String args[]){
    Runnable task = new Task();
    Thread subTread1 = new Thread(task);
    Thread subTread2 = new Thread(task);
    subTread1.start();
    subTread2.start();
}


public class Task implements Runnable {

    @Override
    public void run() {
		//로직
    }

}

 

 

위와 같이 활용하면 된다.(스프링에서는 조오오오금 다르게 사용하긴 해야하는데...)

일단, 간단하게 사용방법을 알아보았다.

 

실무에서는 아직 이해를하고 사용한 적이 없어서... 자세한 설명은 그때 다시 기회가 되면 하기로 하겠다.

반응형

'Language > Java' 카테고리의 다른 글

[JAVA] 상속 👨‍👩‍👧‍👦  (2) 2023.09.12
[JAVA] JVM 메모리 구조  (0) 2023.09.12
[JAVA] Collection FrameWork  (0) 2022.01.12
[JAVA] 제네릭(Generic)  (0) 2022.01.10
[JAVA] Arrays 클래스  (0) 2022.01.10