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파일으로 더미데이터 생성하기  (1) 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 two-pointer
    Java 생성자
    java 유클리드 호제법
    데이터 타입
    java arrays.copyofrnage()
    java
    java 에라토스테네스의 체
    java기초
    java 메서드
    java 제어자
    java enhance switch
    개발로드맵
    데이터 크기
    java 세수의합
    프로그래머스 java 기초 트레이닝
    java super
    java 멤버
    Java this
    프로그래머스 java 기초트레이닝
  • 최근 댓글

  • 최근 글

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

티스토리툴바