14일차 - Java강의(쓰레드)

2024. 8. 1. 20:48·Java & Spring/Java

◇ 프로세스와 쓰레드의 개념

  • 프로세스 : 운영체제로부터 자원을 할당받는 작업의 단위
    1. 프로세스의 구조 : Code와 Data그리고 메모리 영역(Stack, Heap)으로 구성
      • Code : main메소와 같은 코드
      • Data : 프로그램이 실행 중 저장 할 수 있는 저장공간
      • Memory : Stack(지역변수, 매개변수, 리턴변수), Heap(동적으로 필요한 변수)를 저장
  • 쓰레드 : 프로세스가 할당받은 자원을 이용하는 실행의 단위
    1. 작업중인 프로그램에서 실행요청이 들어오면 생성
    2. 명령처리를 위한 메모리공간(Stack)도 할당받음

◇ 쓰레드

  • 싱글 쓰레드 : 프로세스 안에서 하나의 쓰레드만 실행되는 것
  • 멀티 쓰레드 : 프로세스 안에서 여러개의 쓰레드가 실행되는 것
    • 멀티 쓰레드의 장점
      1. 동시 작업으로 성능이 좋아진다.
      2. 스택을 제외한 모든 영역에서 메모리를 공유하기 때문에 자원을 효율적으로 사용할 수 있다.
      3. 응답 쓰레드와 작업 쓰레드를 분리하여 빠르게 응답을 줄 수있다. (비동기)
    • 멀티 스레드의 단점
      1. 프로세스의 자원을 공유하면서 작업을 처리하기 때문에 충돌이 발생할 수 있다.
      2. 교착상태가 발생할 수 있다(A가 B를 B가 A를 원하는 상황)
  • Thread : Thread를 extends(상속)받아 구현
    public class Main {
        public static void main(String[] args) {
            TestThread thread = new TestThread();
            thread.start();
        }
    }
    
    class TestThread extends Thread {
        @Override
        public void run() {
            for (int i = 0; i <100; i++) {
                System.out.print("*");
            }
        }
    }


  • Runnable : Runnable을 implements해 구현
    public class Main {
        public static void main(String[] args) {
            Runnable run = new TestRunnable();
            Thread thread = new Thread(run);
    
            thread.start();
        }
    }
    
    class TestRunnable implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i <100; i++) {
                System.out.print("$");
            }
        }
    }

    ※ Runnable 방법을 선호하는 이유 : 인터페이스이기에  클래스를 상속받을 수 있다.
  • 데몬 쓰레드 : 보이지 않는 곳(background)에서 실행되는 낮은 우선순위를 가진 쓰레드
    public class Main {
        public static void main(String[] args) {
            Runnable demon = () -> {
                for (int i = 0; i < 1000000; i++) {
                    System.out.println("demon");
                }
            };
    
            Thread thread = new Thread(demon);
            thread.setDaemon(true); // true로 설정시 데몬스레드로 실행됨
    
            thread.start();
    
            for (int i = 0; i < 100; i++) {
                System.out.println("task");
            }
        }
    }
     demon쓰레드는 우선순위가 낮다, 다른 쓰레드가 모두 종료되면 강제 종료당하기 때문에
    main이 100이 찍히면 그 즉시 종료된다.

  • 사용자 쓰레드 : 보이는 곳(foreground)에서 실행되는 높은 우선순위를 가진 쓰레드
    기존에 만들었던 쓰레드 들이 다 사용자 쓰레드이다.
  • 쓰레드 우선순위와 쓰레드 그룹

    1. 최대 우선순위(MAX_PRIORITY) = 10
    2. 최소 우선순위(MIN_PRIORITY) = 1
    3. 보통 우선순위(NROM_PRIORITY) = 5 → 기본값
      ※ 더 세분하게 1~10으로 지정 가능, 해당 우선순위는 OS가아닌 JVM에서 설정한 우선순위
  • 쓰레드 그룹 : 서로 관련된 쓰레들끼리 그룹으로 묶어 다룰 수 있다.

- 우선순위 설정 및 확인방법

// 설정
Thread thread1 = new Thread(task1);
thread1.setPriority(8);

// 확인
int threadPriority = thread1.getPriority();
System.out.println("threadPriority = " + threadPriority);

 

 

'Java & Spring > Java' 카테고리의 다른 글

csv파일으로 더미데이터 생성하기  (0) 2024.11.08
18일차 - Java강의(쓰레드 명령어)  (0) 2024.08.07
13일차 - Java강의(예외, 제네릭)  (0) 2024.07.31
11일차 - Java강의(계산기 실습, 클래스화, 추상화)  (0) 2024.07.29
10일차 - Java강의(제어자, package, import, 상속, this, super)  (0) 2024.07.26
'Java & Spring/Java' 카테고리의 다른 글
  • csv파일으로 더미데이터 생성하기
  • 18일차 - Java강의(쓰레드 명령어)
  • 13일차 - Java강의(예외, 제네릭)
  • 11일차 - Java강의(계산기 실습, 클래스화, 추상화)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java this
    java 메서드
    java 세수의합
    java super
    데이터 타입
    개발로드맵
    java 제어자
    데이터 크기
    java 유클리드 호제법
    프로그래머스 java 기초 트레이닝
    java enhance switch
    java
    자료구조
    Java 생성자
    java 멤버
    java 에라토스테네스의 체
    java기초
    프로그래머스 java 기초트레이닝
    java two-pointer
    java arrays.copyofrnage()
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
14일차 - Java강의(쓰레드)
상단으로

티스토리툴바