스레드(Thread) 알아보기

changi123·2023년 9월 16일
0

공부

목록 보기
2/24
post-thumbnail

프로세스와 스레드

프로세스란 ?

프로세스는 일반적으로 cpu에 의해 메모리에 올려져 실행중인 프로그램을 말하며, 자신만의 메모리 공간을 포한한 독립적인 실행 환경을 가지고 있다. 자바 가상 머신 (JVM) 은 주로 하나의 프로세스로 실행되며, 동시에 여러 작업을 수행하기 위해서 멀티 스레드를 지원하고 있다.

스레드란 ?

스레드란 프로세스안에서 실질적으로 작업을 실행하는 단위를 말한다. 스레드 역시 자바가상머신 (JVM)에 의해 관린된다. 프로세스에는 항상 한 개 이상의 스레드가 있으며 main 스레드 하나로 시작하여 스레드를 추가 생성하게 되면 그게 멀티 스레드 환경이 된다. 이러한 멀티 스레드 환경은 프로세스의 리소르르 공유하기 때문에 효율적이긴 하지만 잠재적인 문제점에 노출될 수 있다.

생성자

  • Thread() : 새로운 스레드 객체 할당
  • Thread(String name) : name 이름의 새로운 스레드 객체가 할당
  • Thread(Runnable target) : Runnable target이 구현된 스레드 객체 할당
  • Thread(Runnable target, String name) : Runnable target 이 구현된 name 이름의 스레드 객체 할당

메소드를 알아보기 전에 먼저 Runnable 을 구현한 게 뭔지 알아보자

Runnable 인터페이스란 ?

Runnable 인터페이스는 run() 메소드 한 개를 구현하도록 하여 스레드가 시작될 때, 실행될 코드를 구현하는 것이다. 즉, 이름 그대로 실행할 수 있는 코드를 구현함. -> 알아보다보니 Thread 클래스에 관해서도 나와서 정리

Thread 클래스란 ?

스레드 클래스는 자바에서 컴퓨팅 시스템의 스레드의 기능을 구현해준 클래스다. Thread 인스턴스 생성 시 실행될 코드를 Runnable 인터페이싀 run() 메소드를 오버라이딩 하여 구현하고 Thread 클래스에 인젝션해주면 해당 코드가 실행되는 스레드가 생성되는 것

즉, 정리해보면 이렇다

Runnable 인터페이스 : 스레드에서 실행될 코드를 run() 메소드에 구현

Thread 클래스 : 컴퓨팅 시스템의 스레드 기능을 가진 클래스

쓰레드 메소드

  • start() -> 쓰레드는 start() 함수를 호출해야만 실행시킬 수 있다. 쓰레드는 한 번 호출하면 다시 호출할 수 없기 때문에 두 번 이상 호출을 시도하는 경우 IllegalThreadStateExcption텍스트 예외를 던진다. 다시 실행하기 위해선 다시 초기화를 해야한다.
  • sleep() -> 쓰레드를 일정 시간동안 멈출 수 있다. sleep()메서드가 실행되어 일시정시된 쓰레드는 시간이 다 되거나 interrupt()메서드가 호출되면 다시 재개한다. interrupt() 시 interruptException 예외가 던져지니 반시드 try-catch 안에서 사용해야한다.
  • join() -> 다른 쓰레드의 작업을 일정 시간동안 기다리는 메서드이다. join 한 쓰레드가 모두 작업을 마칠때까지 기다린다.

sleep() 과 join은 같은 기능 아닌가 ?

두 메서드가 대기한다는 점은 같다. 하지만 sleep() 메서드는 현재 쓰레드를 기준으로, join() 메서드는 특정 쓰레드를 기준으로 대기한다는 점이 큰 차이이다.

interrupt(), isInterrupted(), Interrupted()

  • interrupt() : 진행중인 쓰레드의 작업을 멈추는 요청을 하는 기능 -> 요청이기 때문에 쓰레드를 강제로 종료시키진 않고 interrpted 변수를 true값으로 바꿔줄 뿐이다.
  • isInterrupted() : boolean 반환 타입이며 쓰레드의 인터럽트 여부를 확인한다. interrupted() 의 정적 메서드로 현재 진행중인 쓰레드의 인터럽트 여부를 반환하고 이를 false 상태로 변경시켜줘야한다.

쓰레드 우선순위 ?

여러개를 함께 수행할 수 있으니 당연히 우선순위도 정할 수 있어야한다. 우선순위 범위는 1~10까지 이고 숫자가 높을수록 우선순위가 높다. 대표적으로 프로그램이 시작될 때 실행되는 main함수는 메인 쓰레드라고도 불리면 우선순위는 5이다.

데몬 쓰레드

만약 데몬 쓰레드를 설정하지 않고 초단위로 실행되는 쓰레드를 작성한다면 프로그램을 강제종료하지 않는 이상 종료되지 않을 것이다. 그때 사용해야할 메서드가 setDaemon() 이다

  • setDaemon() : boolean 형이 파라미터로 던져지며 반드시 start() 함수가 호출되기 전에 setDaemon(true); 가 실행되어야한다. 그렇지 않으면 illegalThreadStateException이 발생한다
profile
개발자 홍찬기 꾸준한 사람이 되자

0개의 댓글

관련 채용 정보