알버트의 개발하는 블로그

자바 제19강 : 자바 스레드(Thread)의 개념과 스레드(Thread) 주요 메소드 본문

프로그래밍 언어/Java

자바 제19강 : 자바 스레드(Thread)의 개념과 스레드(Thread) 주요 메소드

알버트 2021. 9. 10. 10:26

 

이번시간에는 자바에서 제공하는 스레드(thread)의 개념과 스레드 관련 주요 메소드를 알아보도록 하겠습니다. 스레드는 프로그래밍으로 멀티태스킹을 구현함에 있어서 굉장히 중요하기 때문에 반드시 알아두어야 하는 개념 중에 하나입니다.

 


스레드란? (Thread)

우리가 컴퓨터로 음악을 들으면서 워드작업을 하면 2가지 이상의 프로세스를 동시에 하는 것입니다. 그리고 이것을 우리는 멀티태스킹을 한다라고 합니다. 쓰레드는 이 프로세스 내에서 실행되는 세부 작업의 단위입니다. 여러 개의 쓰레드가 모여 하나의 프로세스를 구성하게 되는데요. 그리고 이 하나의 프로세스를 구성하는 여러 개의 쓰레드를 멀티 쓰레드라고 합니다.

 

예를 들면, 자바 내에서 우리가 메인 클래스에서 프로그래밍을 하면 메인클래스의 쓰레드가 무조건 실행이 됩니다. 그리고 별도로 스레드를 상속받은 다른 클래스가 있다면 두 스레드가 동시에 실행할 수 있는데 이게 멀티 쓰레드인 것입니다. 그래서 자바에서 쓰레드의 개념과 쓰레드 관련 주요 메소드를 아는게 중요합니다.

 

 


스레드 (Thread) 관련 주요 메소드

run() : 스레드에서 실질적으로 실행되는 코드 블록

setDaemon() : 메인 스레드가 종료되면 자동으로 종료되게 설정

start() : 해당 스레드의 run()메소드를 시작하게 하는 함수 (실행시켜주는 함수)

sleep(time) : 주어진 시간(밀리초)동안 스레드 작동을 멈춤

interrupt() : 스레드를 강제로 종료

스레드 관련 주요 메소드는 이와 같습니다. 이제 간단한 예제들을 통해서 실습해보겠습니다.

 

 

 


스레드 (Thread) 예제 - extends Thread(스레드상속)

 

먼저 스레드를 상속받고 run() 메소드를 override해서 스레드를 구현해줍니다. 여기선 DigitThread 클래스로 구현해주었습니다. run() 메소드는 1부터 26까지의 수를 0.2초간격으로 출력해주도록 오버라이드했습니다.

 

 

 

 

 

그리고 메인에서 이 DigitThread 클래스로 객체를 만들고 run() 메소드를 실행하면? 오버라이드된 일반 메소드가 실행이 됩니다. 한번 실행해보겠습니다.

 

 

 

 

 

이처럼 먼저 digit객체의 run()메소드가 실행된 뒤에 메인 메소드가 실행되는 것을 알 수 있습니다. 하지만 이러면 멀티 스레드를 구현할 수 없습니다. 그래서 여기선 run() 말고 start() 메소드를 사용해주면 멀티스레드를 구현할 수 있습니다.

 

 

 

 

이렇게 run()메소드를 start()메소드로 바꿔주었습니다. 한번 실행해보겠습니다.

 

 

 

 

이렇게 숫자와 알파벳이 동시에 출력되는 것을 알 수 있습니다. 이처럼 start() 메소드를 통해서 두가지 스레드가 동시에 실행되는 멀티스레드 구현이 가능합니다.

 

 

 

 

 


스레드 (Thread) 예제 - implements Runnable

 

 

이번엔 스레드를 상속받아서 (extends Thread) 하는 방법이 아닌 인터페이스 Runnable을 구현받아서 실행하는 방법입니다. 코드는 위와 같습니다. Runnable 인터페이스를 구현받은 AlphaThread 클래스에서는 소문자 a부터 z까지 출력하도록 해주었습니다.

 

 

 

 

메인 클래스입니다. extends Thread와는 형식이 약간 다른 것을 알 수 있습니다. 위 코딩처럼 해주면 Runnable 인터페이스를 구현받은 클래스로 객체를 생성할 수 있습니다. 그리고 start()를 마찬가지로 코딩해주었습니다.

이제 실행해보겠습니다.

 

 

 

이처럼 대문자와 소문자가 동시에 출력되는 멀티스레드 기능을 하는 것을 볼 수 있습니다.

 

 

 

 

이처럼 스레드는 자바 내에서 멀티 태스킹과 관련하여 정말 중요한 개념입니다. 일반적으로 extends Thread와 implements Runnable 두가지 기법이 있는데 implements Runnable이 다중 상속이 가능하고 유용하기 때문에 더 많이 쓰입니다.

읽어주셔서 감사합니다~!