본문 바로가기
Spec UP - Backend/나도코딩의 자바기본편

chap_12. Thread와 Runnable, Join, MultiThread

by TIS_Ha 2023. 7. 11.
반응형

일반적으로 실행가능한 프로그램은 .exe 형태로 만들어져있다.

그리고 프로그램을 실행함으로써 현재 돌아가고 있는 상태를 프로세스라고 한다.

해당 프로세스 자원을 이용해 작업을 수행하는 것을 쓰레드라고 한다.

 

일반적으로 프로세스는 여러개의 쓰레드를 가질 수 있지만,

따로 쓰레드 처리를 해주지 않으면 Java는 하나의 프로세스가 하나의 쓰레드만을 가지며 순차적으로 수행한다.

 

위와 같이 1명이 1~10번방 청소를 혼자 순차적으로 진행하도록 하였다.

이번에는 청소를 할 사람 2명으로 늘려서 2개의 쓰레드를 처리해보자.

우선 CleanThread 라는 클래스를 별도로 생성하여 직원이 홀수방을 청소를 수행하는 메소드를 생성하였다.

그리고 사장님이 짝수방을 청소하는 cleanByBoss() 메소드를 생성하였다.

cleanThread와 cleanByBoss 메소드가 동시에 수행되도록 하기 위해서는 위와 같이

cleanThread.start(); 구문으로 쓰레드를 별도로 실행할 수 있다.

이처럼 쓰레드는 동시에 여러 작업을 실행하도록 할 수 있다.


Runnable은 이전 시간에 학습한 Thread와 거의 동일하다.

쓰레드를 만드는 방법은 크게 쓰레드 클래스를 상속하는 방법과 Runnable 인터페이스를 통해 구현하는 방법이 있다.

여기서 Thread 와 Runnable의 차이는 상속과 인터페이스이다.

- Thread : Thread 클래스를 상속

- Runnable : Runnable 인터페이스를 구현

상속할때는 단일 상속만 가능.(하나의 부모클래스만 가질 수 있음.)

인터페이스는 여러개를 한꺼번에 구현할 수 있고 부모 클래스를 상속 받을 수도 있다.


 

thread.join() 의 역할은 쓰레드가 종료될때까지 기다렸다가 종료되면 다음 구문을 실행하도록 하는 것이다.

이 때 join()은 이전 쓰레드가 종료되지 않더라도 어느정도의 시간을 기다렸다가 다음구문을 실행하도록 설정할 수도 있다.

thread.join(2500); 을 설정하면 2.5초간 대기하였다가 다음 쓰레드를 실행하도록 설정할 수 있다.

참고로 Thread.sleep(1000) 은 설정한 시간 만큼 쓰레드를 잠시 멈추는 기능을 한다.(1초 대기)

위 구문을 실행하면 직원청소가 먼저 시작되고 약 2.5초 뒤에 사장님 청소가 시작되는 것을 확인할 수 있다.

 


다중쓰레드를 통해 여러개의 쓰레드를 동시에 실행할 수도 있다.

반응형

댓글