본문 바로가기
스터디/혼공학습단 10기 - 자바 & 머신러닝

[혼공학습단] 혼공자바 4주차 - 자바의 스레드(Thread) 맛보기

by 찌노오 2023. 7. 30.

선택미션

주차 진도 선택 미션
4주차 Chatper 12 p.539 문제 2번 풀고, 풀이 과정 설명하기

 

 

스레드(Thread)

스레드(Thread)란?

스레드는 프로세스 내에서 실행되는 작은 작업 단위를 말한다.

각 프로세스는 최소한 하나의 스레드를 가지고 있으며, 이 스레드를 메인 스레드라고 한다. 메인 스레드는 프로그램의 진입점(main 메서드)에서 시작되며, 다른 스레드(작업스레드)들을 생성하고 관리할 수 있다. 

 

작업 스레드를 만드는 방법은 크게 2가지가 있다.

2023.07.30 - [스터디/혼공학습단 - 자바] - [혼공학습단] Java - 작업 스레드(Thread) 생성의 2가지 방법

 

[혼공학습단] Java - 작업 스레드(Thread) 생성의 2가지 방법

자바의 멀티스레드 스레드를 생성하는 방법 Thread 하위 클래스로 부터 생성 Thread 클래스를 상속받아 스레드를 생성하는 방식 Thread 클래스의 서브 클래스를 정의하고 run() 메서드를 오버라이딩하

jinooh.tistory.com

 

스레드를 사용하는 이유는?

동시성(Concurrency) 처리

 

스레드를 사용하면 여러 작업을 동시에 실행할 수 있다. 이를 통해 병렬 처리로 인한 성능 향상을 기대할 수 있다.

독립적인 작업일수록 선형적으로 작업을 할 필요가 없기 때문에 동시에 처리하는 식이다.

 

예를 들어, 이케아에서 서랍장을 샀는데 한 명은 서랍을 조립하고 한 명은 프레임을 조립한다면, 전체 작업의 시간이 줄어드는 효과가 있다. 

 


반응성 향상( Responsiveness)

 

사용자와의 상호작용이 필요한 애플리케이션에서 스레드를 사용하면 UI를 더 빠르게 응답할 수 있다. 긴 작업을 메인 스레드에서 처리하면 사용자 인터페이스가 먼저 응답하지 않는 현상이 발생할 수 있다. 이를 피하기 위해 메인 스레드 이외의 스레드에서 작업을 수행한다.

 

예를 들어 크롬 웹에서 이미지를 다운받는 동안 우리는 새로운 이미지를 검색할 수 있는데, 만약 싱글 스레드로 구성되어 있다면 특정 작업이 끝날 때까지 이미지를 다운받지 못하거나 다운받는 동안 아무 작업도 하지 못할 것이다.

 


자원 공유(Shared Resource)

 

스레드는 같은 프로세스 내에서 실행되기 때문에 힙 메모리 등의 자원을 공유하기 쉽다. 이를 통해 데이터를 효율적으로 공유하고 상태를 유지할 수 있다.

 

장점이자 단점이 될 수 있는 요소인데, 아까 이케아 서랍장 조립으로 다시 가보자.
서랍장과 프레임 조립 두가지 스레드로 나눠진 작업에서 다시 공통작업으로 나사조임이라는 세부 작업이 있다고 가정해보자. 모두 드라이버, 나사, 설명서가 필요한데 한명이 드라이버를 쥐고 한 명이 설명서를 쥐고 있으면 둘 다 작업을 하지 못하는 병목상태(데드락)에 빠지거나, 한 명이 나사나 설명서를 집으면 나머지 한명은 나사조임이라는 작업을 시작하지 못하게 막는 상호배제와 같은 개념이 필요하다.

 

 

p.539 문제 2번 풀고, 풀이 과정 설명하기

 

동영상과 음악을 동시에 재생하기 위해 두 가지 스레드를 실행하는 코드다.

1초간 간격으로 총 세 번씩 동시에 호출하는 구조로 되어 있다.

 

 

ThreadExample.java

main() 메서드에서 두 개의 스레드를 생성하고 실행한다.
thread1은 MovieThread 클래스로 생성한 스레드이고, thread2는 MusicRunnable 클래스로 생성한 스레드이다.
thread1.start()와 thread2.start()를 호출하여 각각의 스레드를 실행시킨다.

 

MovieThread.java

Thread 클래스를 상속받아서 만든 스레드 클래스. run() 메서드를 오버라이딩하여 동영상을 3번 재생하는 작업을 수행한다.

 

MusicRunnable.java

Runnable 인터페이스를 구현한 클래스. run() 메서드를 오버라이딩하여 음악을 3번 재생하는 작업을 수행한다.

 

실행결과

 

 

 

 

 

 

 

References

https://hbase.tistory.com/308

 

반응형

댓글