스레드 개념

김형준 Kim Hyeong Jun·2022년 12월 9일
0

멀티 스레드

운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스라고 부른다.

스레드

사전적 의미로 한 가닥의 실이라는 뜻
한 가지 작업을 실행하기 위해 순차적으로 실행할 코드를 실처럼 이어놓았다고 해서 유래된 이름

메인 스레드

자바의 모든 애플리케이션은 메인 스레드가 main() 메소드를 실행시키면서 시작한다.
main() 메소드의 마지막 코드를 실행하거나 return 문을 만나면 실행이 종료된다.

싱글 스레드 애플리케이션은 메인 스레드가 종료되면 프로세스도 종료된다.
하지만 멀티 스레드 애플리케이션은 실행 중인 스레드가 하나라도 있다면, 프로세스는 종료되지 않는다.

스레드 생성

  1. Thread 클래스로부터 직접 생성
  2. Thread 하위 클래스로부터 생성

스레드의 이름

스레드는 자신의 이름을 가지고 있다.
큰 역할을 하는 것은 아니지만, 디버깅을 할 때에 어떤 스레드가 어떤 작업을 하는지 조사할 목적으로 사용될 수 있다.

동기화 메서드

멀티 스레드 프로세스에서는 스레드들이 객체를 공유해서 작업해야 하는 경우가 있다.

멀티 스레드 프로그램에서 단 하나의 스레드만 실행할 수 있는 코드 영역을 임계 영역이라고 한다.
자바는 임계 영역을 지정하기 위해 동기화 매서드를 제공한다.
스래드가 객체 내부의 동기화 메소드를 실행하면 즉시 객체에 잠금을 걸어 다른 스레드가 동기화 메소드를 실행하지 못하도록 한다.

public synchronized void method() { // 임계 영역 코드 }

스레드 제어

스레드 객체를 생성하고 start() 메소드를 호출하면 바로 실행되는 것이 아니라 실행 대기 상태가 된다.
이는 언제든지 실행할 준비가 되어 있는 상태라는 말이다.

스레드 상태 제어 메서드

  • interrupt() : 일시 정지 상태의 스레드에서 InterruptedException을 발생시켜, 예외 처리 코드(catch)에서 실행 대기 상태로 가거나 종료 상태로 갈 수 있도록 한다.
  • sleep(long millis) : 주어진 시간 동안 스레드를 일시 정지 상태로 만든다.
  • stop() : 스레드를 즉시 종료한다. 불안전한 종료를 유발하므로 사용하지 않는 것이 좋다

안전한 종료

스레드가 stop() 메서드를 통해 종료되면 불안전한 종료가 될 수도 있다고 한다.(또한 deprecated 메서드가 됨)
그럼 안전한 종료는??

  1. stop 플래그를 이용하는 방법
  2. interrupt() 메소드를 이용하는 방법
profile
I want be a developer🙂

0개의 댓글