Thread(작성중)

주성천·2023년 11월 23일

1. Thread & Process


Process

  • 실행중인 프로그램
  • resource와 thread로 구성

Thread

  • process 내에서 작업 수행
  • thread 생성 비용 < process 생성 비용

Single Thread Process

  • process 내에 하나의 thread가 작업 수행

Multi Thread Process

  • process 내에 다수의 thread가 번갈아 작업 수행
  • 자원 효율적 사용 가능
  • 응답성 향상
  • 주의해야 할 점
    1. 동기화 문제
    2. dead-lock 문제
    3. 효율적인 thread 실행 문제

생성 방법

// 1. Thread 클래스 상속
public class MyThread1 extends Thread {
    @Override
    public void run() {
        for(int i = 0; i < 100; i++) {
            System.out.println("MyThread1: " + i);
        }
    }
}

// 2. Runnable 인터페이스 구현
public class MyThread2 implements Runnable {
    @Override
    public void run() {
        for(int i = 0; i < 100; i++) {
            System.out.println("MyThread2: " + i);
        }
    }
}

// main
public class Main {
    public static void main(String[] args) {
        MyThread1 myThread1 = new MyThread1();
        Thread myThread2 = new Thread(new MyThread2());
        
        myThread1.start();
        myThread2.start();

        for(int i = 0; i < 100; i++) {
            System.out.println("Main Thread: " + i);
        }
    }
}
  • Thread는 start()를 호출해야 작업 시작
  • Thread의 작업 순서는 OS의 스케줄러가 결정

메소드
.run()
.start()
.join()
.sleep()
.setPriority() // 기본은 5, 우선 수위는 내림차순

run() 대신 start()를 호출하는 이유

  • start() 호출 시 call stack 실행 순서
  • run() 호출 시 call stack 실행 순서

Thread 우선순위

  • 작업 중요도에 따라 Thread 우선수위를 정할 수 있음
  • 다만 최종적으로는 OS 스케줄러에 의해 우선순위가 결정 됨으로 반드시 우선순위대로 작업이 수행되지는 않음

Thread 그룹

  • 모든 Thread는 하나의 그룹에 포함되어 있어야 함(Default 그룹은 main Thread)

Daemon Thread and Non-Daemon Thread

Daemon Thread

  • Non-Daemon Thread의 작업을 돕는 보조 역할 수행
  • ex) garbage collector, auto save, 화면 자동 갱신 등 ...
  • 무한 루프로 작성(Non-Daemon Thread가 종료될 때 자동 종료)

Non-Daemon Thread

  • 일반 Thread
  • setDaemon()는 start() 전에 실행되어야 한다.

Thread의 상태

  1. NEW: Thread는 생성, start()가 호출 전 상태
  2. RUNNABLE: 실행 중, 실행 가능 상태
  3. BLOCKED: 동기화블럭에 의해 일시 정지된 상태(lock 해제 대기 상태)
  4. WATING: 작업이 종료되지 않았지만 실행 불가능 상태(일시정시)
  5. TIMED_WATING: 일정시간 동안 일시정지 상태
  6. TERMINATED: Thread 작업 종료 상태
  • suspend()
  • sleep()
  • wait()
  • join()
  • I/O block
  • time-out
  • resume()
  • notify()
  • interupt()

Thread 실행 제어

static sleep(): 지정된 시간 Thread를 일시정지
void join(): 지정된 시간 동안 Thread가 실행되도록 함
void interupt(): sleep(), join()에 의해 일시정시 상태의 Thread를 실행 대시 상태로 만듦
void stop(): Thread 즉시 종료
void suspend(): Thread 일시 정지
void resume(): suspend()에 의해 일시 정지 상태의 Thread를 실행 대시 샅애로 만듦
static yield(): 다른 Thread에게 할당된 시간 양보 후 실행대기 상태로 진입

profile
기록과 정리

0개의 댓글