• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [Java 정리] Thread 2
        2022년 08월 13일
        • starryeye
        • 작성자
        • 2022.08.13.:30

        이미 알던 지식이지만, 기본으로 돌아가서.. Java의 관점에서 한번 정리해보자.

         

        쓰레드 우선순위

        쓰레드의 start() 메서드를 호출하기 전에 쓰레드의 우선순위를 정할 수 있다.

         

        void setPriority(int newPriority)
        int getPriority()

        public static final int MAX_PRIORITY = 10
        public static final int MIN_PRIORITY = 1
        public static final int NORM_PRIORITY = 5

        main 쓰레드의 우선순위는 5 이며,

        쓰레드의 우선순위는 쓰레드를 생성한 쓰레드와 동일한 우선순위로 셋팅된다.

         

        <참고>

        멀티 코어 환경에서 두개의 쓰레드로 각각 하나의 작업, 총 두개의 작업을 돌릴 경우엔

        당연하게도 우선순위에 따른 차이가 전혀 없다.

        (하지만.. OS, JVM에 따라 정책이 다르므로 확인은 필요하다.)

         

         

        쓰레드 그룹

        쓰레드 그룹은 보안상의 이유로 도입된 개념이다.

        모든 쓰레드는 반드시 쓰레드 그룹에 포함되어 있어야 한다.

        기본적으로 자신을 생성한 쓰레드와 같은 쓰레드 그룹에 속하게 된다.

        자신이 속한 쓰레드 그룹이나 하위 쓰레드 그룹은 변경 가능하지만,

        다른 쓰레드 그룹의 쓰레드를 변경은 불가능하다.

         

        쓰레드 그룹 지정은 쓰레드를 생성할 때 Thread 생성자를 이용한다.

        Thread(ThreadGroup group, String name)
        Thread(ThreadGroup group, Runnable target)
        Thread(ThreadGroup group, Runnable target, String name)
        Thread(ThreadGroup group, Runnable target, String name, long stackSize)

         

        <참고>

        자바 어플리케이션이 실행되면 JVM은 main과 system이라는 쓰레드 그룹을 만든다.

         

        system ThreadGroup

        JVM 운영에 필요한 쓰레드를 포함시킨다.

        (GC를 수행하는 Finalizer 쓰레드가 system 쓰레드 그룹에 속한다.)

         

        main ThreadGroup

        개발자가 생성하는 모든 쓰레드 그룹은 main 쓰레드 그룹의 하위 쓰레드 그룹이 된다.

        쓰레드 그룹을 지정하지 않으면 main 쓰레드 그룹에 속한다.

        쓰레드를 생성하면.. 해당 인스턴스의 참조는 속하게된 쓰레드 그룹에 저장된다.

        -> GC의 제거 대상이 되지 않는다.

         

        <참고>

        main 쓰레드에서 참조 변수 없이, 쓰레드 그룹 지정 없이 쓰레드를 생성하면

        main ThreadGroup에 포함되기 때문에 GC의 대상이 되지 않는다.

         

         

        데몬 쓰레드

        데몬 쓰레드는 다른 일반 쓰레드(사용자 쓰레드, User Thread)의 작업을 돕는 보조적인 역할을 수행하는 쓰레드이다.

        사용자 쓰레드가 모두 종료되면 모든 데몬 쓰레드는 모두 종료된다.

        -> 따라서 프로세스의 종료 시점은 사용자 쓰레드가 모두 종료되는 시점이다.

         

        관련 메서드

        boolean isDaemon()
        void setDaemon(boolean on)

        setDaemon() 메서드는 해당 쓰레드를 데몬 쓰레드로 설정하는 쓰레드이다.

        start() 메서드를 호출하기 전에 셋팅 해줘야 한다.

         

        대표적인 데몬 쓰레드는 어떤게 있을까?

        GC, 화면 갱신 쓰레드, 워드 프로세서의 자동 저장 쓰레드 등이 있다.

         

         

        쓰레드의 생성에서 소멸까지

        (위 번호의 순서대로 쓰레드가 수행되는 것은 아니다.)

         

        쓰레드의 실행을 제어하는 메서드로

        쓰레드의 상태를 제어할 수 있다. 이를 그림으로 나타낸게 위 그림이다.

         

        suspend(), resume(), stop() 메서드는 메서드 정의 document에 "Deprecated"라 적혀있다.

        사용하지 말자라는.. 뜻이다.. 교착상태(Dead-lock)를 쉽게 유발한다.

         

        'Java' 카테고리의 다른 글

        [Java 정리] Thread 4  (0) 2022.08.22
        [Java 정리] Thread 3  (0) 2022.08.19
        [Java 정리] Thread 1  (0) 2022.08.13
        [Java 정리] String, final, Immutable  (0) 2022.08.05
        [Java 정리] Garbage Collector 1  (0) 2022.07.30
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바