20.12.14

민주·2021년 1월 17일
  1. Thread State

    - getState()를 통해 현재 상태를 알 수 있다.

    - workThread.
    - 12 : 조건에 만족 할 때 까지 cnt를 계속 증가시켜주는 반복문
    - 15 ~ 19 : Thread.sleep은 잠시 멈춰주는 메서드이기 때문에 try-catch문으로 InterruptedException예외 발생시 처리하는 영역을 만들어 주어야 한다. TIMED_WAIT상태를 만들어 준다.

    - 11 : work thread를 객체화하여 work thread를 생성시켜줌
    - 15 : workthread상태 얻기
    - 18 : NEW는 객체 생성상태로 생성상태가 NEW라면 work실행
    - 19 : TERMINATED는 실행을 마친 상태로 상태가 TERMINATED가 된다면 break로 반복문 멈춤
    - 26 ~ 30 : 크게 의미 있는건 아니고 너무 빠르게 진행 되기 때문에 조금씩 멈추면서 상태를 찍기 위해 sleep을 써주었다.
    - 출력 값 :

  2. sleep()

    • Thread는 유용한 기능이지만 예상대로 움직이지 않기 때문에 Thread Control을 위한 메서드들이 존재한다
    • sleep은 주어진 milliseconds동안 thread를 일시 정지 시킨다.
    • Thread.sleep(1000) 형식으로 사용한다.(1초)
  3. yield()

    - yield는 특정 thread에게 제어권을 양보한다.
    - Thread.yield() 형식으로 사용한다.

    - Thread A와B

    - Main Thread
    - 18 : ThreadA의 14의 yield를 true로 바꿔 동작하게 해서 Thread.yield 동작
    - 19 , 20 : 0.5초 정치 시켰다가 A의 yield는 false로 바꿔 동작을 정지 시키고 B의 yield를 true로 바꿔 B의 Thread.yield 동작

  4. join()
    - join()은 다른 thread의 종료를 기다린 후에 실행 할 때 사용한다.

    - work thread.
    - 12 : 1에서 100까지 더하는 실행문

    - 8 : 워크스레드 객체화
    - 11 : oper가 계산을 끝낼때까지 기다렸다가 아래 실행
    - 11코드가 없으면 워크 스레드가 끝내기 전에 메인 스레드가 아래까지 실행되어 버린다.

  5. wait(), notify(), notifyAll()

    - wait() : 내가 쉬는 것
    - notify() : 누군가를 깨우는 것
    - notifyAll() : 모두를 깨우는 것
    - 이 세개의 호출은 synchronized안에서 해야한다.

    - 점선은 임시로 호출하는 것
    - 실선은 계속 가지고있는 것

    - WorkThread에게 할일 WorkObj를 줌
    - 출력값
    - 번갈아 가면서 일을 할 때 많이 쓴다.

  6. stop flag
    - 기본적으로 thread는 run()의 실행 내용이 모두 실행되면 종료 된다.
    - 무한 반복문으로 이루어 경우는 강제 종료가 필요하다

    - StopFlag 클래스

    - StopFlag를 이용한 스레드 정지
    - stopflag의 run은 while이 true이므로 무한 반복문이다.
    - 메인의 13처럼 stop메서드가 있지만 이는 컴퓨터를 그냥 확 꺼버리는 행위와 똑같으므로 사용하지 않도록한다.
    - 14 : setStop을 true로 바꾸면 while문은 false가 되므로 정지가 된다.

  7. interrupt
    - 인터럽트란 작동중, 대기중인 쓰레드에 인터럽트(정지) 신호를 보내는 행위.

    - Inter 클래스
    - while문 정지 자체를 인터럽트로 할때 트라이캐치문 안으로 넣는다

    - 11 : 강제 인터럽트를 발생 시켜서 inter가 트라이에서 캐치로 넘어가면서 정지됨

    - 23 : 메인에서 강제 인터럽트를 발생시키면 if문이 성립되어 정지

  8. Demon Thread
    - Demon Thread는 main thread 작업을 돕는 보조적인 역할을 한다
    - work thread와 마찬가지로 main thread에 의해서 생성된다

    - 하지만 이것처럼 life cycle이 work thread는 main끝나고도 계속 진행되지만 Demon은 main과 함께 끝난다.

    - DemonThread

    - 8 : 이 과정을 통해 워크스레드가 데몬스레드가 된다.

  9. Thread Group
    - thread는 name을 통해서 관리한다
    - 하지만 thread수가 너무 많을 경우 group을 통해 관리 할 수 있다.
    - thread는 지정하지 않을 경우 자동적으로 Main Group에 들어가있다.

    - 13 : 스레드 그룹이름 얻기

    - 11 : thread 그룹 생성 방법
    - ThreadGroup 객체를 통해 Thread Group이 생성된다
    - 생성시 부모 스레드 그룹을 지정하지 않으면 현재 스레드가 속한 그룹의 하위그룹이 된다.

    - ThreadGroup에 대해 단체 명령을 내릴 수 있다.
    - 대표적으로 interrupt()를 통해 해당 그룹의 스레드를 모두 정지 시킬수 있다.

profile
개발이좋아요

0개의 댓글