ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Class] Thread
    Study/Java 2020. 6. 18. 10:45

    Thread 

     

    하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위.

    세부적으로는 운영체제에 의해 관리되는 하나의 작업 또는 태스크 의미

    JVM에 의해 하나의 프로세스 발생: main() 안의 실행문들 (하나의 스레드)

    main() 이외 또 다른 스레드 생성 시 Thread  클래스 상속

     

    1. 멀티스레딩

    : 여러 스레드를 동시에 실행시키는 응용프로그램을 작성하는 기법

     

    장점

     - 메모리 공유로 인한 시스템 자원 소모 감소

     - 동시에 두가지 활동 가능

     

    단점

     - 충돌 발생

     - 코딩이 난해해져 버스 생성 확률 증가

     

    2. 스레드의 생명주기

    1) Runnable (준비 상태)

    스레드가 실행되기 위한 준비단계. CPU를 점유하고 있지 않으며 실행을 하기 위해 대기중

    start() 메소드를 호출하면 run() 메소드에 설정된 스레드가 Runnable 상태로 진입

     

    2) Running (실행상태)

    CPU를 점유하여 실행하고 있는 상태. run() 메소드는 JVM만 호출 가능. Runnable에 있는 여러 스레드 중 우선 순위를 가진 스레드가 결정되면 JVM이 자동으로 run() 메소드 호출하면 스레드가 Running 상태로 진입

     

    3) Dead (종료 상태)

    Running 상태에서 스레드가 모두 실행되고 난 후 완료 상태. 

     

    4) Blocked (지연 상태)

    CPU 점유권을 상실한 상태. 특정 메소드를 실행시켜 Runnable로 전환. wait() 메소드에 의해 Blocked 상태가 된 스레드는 notify() 메소드가 호출되면 Runnable 상태로 감.

    sleep(millis) 메소드에 의해 Block 상태가 된 스레드는 지정된 시간이 지나면 Runnable 상태로 감

     

    3. 스레드 사용법

     

    strat(): 이 스레드가 실행을 시작하게 함. run 메소드를 호출함

    sleep(long millis): 시스템 타이머 및 스케줄러의 정밀도 및 정확성에 따라 현재 실행중인 스레드가 지정된 시간동안 일시적으로 중단되도록 함

    stop(): 스레드의 실행을 중지함 => 더 이상 사용되지 않음

     

    4. Thread.stop

    1) 사용하지 않는 이유

    사용중이던 자원(변수, 파일, 네트워크 연결 등)들이 불완전한 상태로 남겨짐

     

    2) 대체 방안

      (1) stop boolean 변수이용

        ex) 5초 뒤 스레드를 종료시키는 스레드 예시

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    private boolean stop;
        
    Thread(){
        this.stop = false;
    }
    @Override
    public void run(){
        while ( !stop ) {
            LOGGER.debug("스레드 실행");
        }
        LOGGER.debug("실행 종료");
    }
     
    public void threadStop(boolean stop){
        this.stop = stop;
    }
    public class ThreadTest {
        public static void main(String[] args) {
            thread.start();
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            thread.threadStop(true);
    }
    cs

     

    (2) interrupt() 메소드 (일시정지)

    스레드가 일시정지 상태에 있을 때 InterruptedException 예외 발생

    'Study > Java' 카테고리의 다른 글

    [CSS] CSS 적용 우선순위  (0) 2020.06.30
    Graphics을 이용한 Rack View 만들기  (0) 2020.06.19
    [Class] Graphics/Graphics2D  (0) 2020.06.18
    RMI 채팅프로그램(Swing)  (0) 2020.06.17
    this / super 키워드  (0) 2020.06.17
Designed by Tistory.