Java에서 스레드의 수명 주기

게시 됨: 2023-01-27

목차

Java 스레드의 기초:

Java의 스레드는 단일 프로세스 내에서 여러 활동의 성능을 용이하게 합니다. 가벼운 프로세스로 간주됩니다. 스레드는 실행된 명령문의 시퀀스로 정의할 수도 있습니다. Java의 모든 스레드에는 자체 스택, 프로그램 카운터 및 로컬 변수가 있습니다. Java 스레드는 중첩된 일련의 메서드 호출일 수도 있습니다. 메모리, 프로세스별 상태 및 파일은 스레드에서 공유됩니다.

Java에서 스레드 사용:

    • 백그라운드 또는 비동기 처리를 수행하려면
    • GUI 응용 프로그램의 감도를 향상시키기 위해
    • 다중 프로세서 시스템의 긍정적인 측면을 구현하려면
    • 여러 개가 존재하는 경우 프로그래밍 논리를 간소화하기 위해

스레드가 호출될 때 두 가지 실행 경로가 존재합니다. 두 경로 중 하나는 스레드 실행에 사용되고 다른 하나는 스레드 호출 이후의 명령문을 추적합니다. Java의 각 스레드에는 별도의 메모리 공간과 스택이 있습니다.

Java 코드에서 스레드를 사용하는 동안 발생하는 위험 요소는 다음과 같습니다.

  • 스레드가 데이터를 일관되게 보기 위해 공통 변수에 액세스하는 경우 스레드 간의 적절한 조정이 필요합니다.
  • 프로그램에서 과도하게 사용되면 스레드의 성능과 유지 관리가 어려워집니다.

Java에서 스레드의 수명 주기:

프로그램 실행의 모든 ​​순간에 Java의 스레드는 아래 언급된 상태 중 하나로 존재합니다.

  1. 새로운
  2. 막힌
  3. 실행 가능
  4. 시간 초과 대기
  5. 대기 중
  6. 종료됨

Java의 스레드 수명 주기에 대한 자세한 보기

새 스레드:

새로 생성된 스레드는 'New' 상태입니다. 이 상태에서는 실행해도 진행되지 않습니다. 새 상태의 스레드 코드 실행은 아직 발생하지 않았습니다. 아직 실행되지 않았습니다.

실행 가능 상태:

실행 가능 상태의 스레드는 실행할 준비가 되었습니다. 이 상태의 스레드는 언제든지 실행할 준비가 되었거나 이미 실행 중일 수 있습니다. 스레드 스케줄러는 스레드가 실행되도록 시간을 할당하는 책임을 연마합니다. 다중 스레드 프로그램에서 각 개별 스레드에는 특정 시간이 할당됩니다. 각 개별 스레드는 짧은 기간 동안 실행된 다음 일시 중지됩니다. 그런 다음 CPU는 다른 스레드가 실행될 기회를 제공하기 위해 다른 스레드에 양도됩니다. 이 시점에서 CPU를 기다리고 있는 실행 준비가 된 스레드와 현재 실행 중인 스레드는 모두 실행 가능한 상태에 있습니다.

무료 기술 과정을 확인하여 경쟁에서 우위를 점하십시오.

인기 있는 소프트웨어 엔지니어링 과정 살펴보기

LJMU 및 IIITB의 컴퓨터 과학 석사 Caltech CTME 사이버 보안 인증 프로그램
풀스택 개발 부트캠프 블록체인의 PG 프로그램
풀 스택 개발의 임원 PG 프로그램
아래에서 모든 코스 보기
소프트웨어 엔지니어링 과정

대기/차단 상태:

스레드가 일시적으로 작동하지 않는 경우 아래에 언급된 상태 중 하나에 해당합니다.

  • 대기 중
  • 막힌

I/O 완료를 기다리는 스레드가 차단된 상태입니다. 스레드 스케줄러의 기능은 차단되었거나 대기 중인 스레드를 재활성화하여 실행을 예약하는 것입니다. 이 상태의 모든 스레드는 실행 가능한 상태로 변환될 때까지 더 이상 실행을 계속할 수 없습니다. 블록 또는 대기 상태의 스레드는 CPU 주기를 사용하지 않습니다.

스레드는 현재 다른 스레드에 의해 보호되는 코드의 보호된 섹션에 액세스하려고 시도할 때 강제로 차단됩니다. 스케줄러는 섹션이 모든 스레드에 대해 잠금 해제되면 보호 섹션을 기다리는 스레드 중 하나를 실행 가능한 상태로 변환합니다. 한편, 스레드는 특정 조건에서 상대 스레드를 기다리는 동안 대기 상태로 존재합니다. 대기 상태의 스레드는 대기하도록 지정된 조건이 충족되면 실행 가능한 상태로 푸시됩니다. 현재 실행 중인 스레드가 대기/차단 상태로 이동하면 스레드 스케줄러는 실행 가능한 시퀀스에서 다른 스레드가 실행되도록 예약합니다.

시간 지정 대기:

시간 초과 인수를 사용하여 메서드를 호출하면 스레드는 시간 초과 대기 상태에 있습니다. 스레드는 지정된 시간 제한이 완료되거나 알림을 받을 때까지 이 상태를 계속 유지합니다. 예를 들어 스레드가 조건부 대기 또는 휴면을 호출하면 스레드는 시간이 지정된 대기 상태로 전환됩니다.

종료 상태:

스레드 종료는 다음 이유 중 하나로 인해 발생합니다.

  • 스레드 내의 코드 세그먼트 실행 완료 시 스레드의 정상적인 종료.
  • 처리되지 않은 예외 및 세그먼테이션 오류와 같은 드문 오류 이벤트의 발생.

종료된 상태의 스레드는 CPU 주기를 소비하지 않습니다.

세계 최고의 대학에서 소프트웨어 개발 과정을 온라인으로 배우십시오. PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 취득하여 경력을 빠르게 쌓으십시오.

주문형 소프트웨어 개발 기술

자바스크립트 강좌 핵심 Java 과정 데이터 구조 과정
Node.js 과정 SQL 과정 전체 스택 개발 과정
NFT 과정 DevOps 과정 빅데이터 강좌
React.js 강좌 사이버 보안 과정 클라우드 컴퓨팅 과정
데이터베이스 디자인 강좌 파이썬 과정 암호화폐 과정

Java에서 스레드 상태 구현:

Java에서 스레드의 현재 상태를 달성하기 위해 Thread.getState() 메서드를 사용합니다. Java는 스레드 상태에 대한 ENUM 상수가 정의된 java.lang.Thread.State 클래스도 제공합니다. 자세한 내용은 아래 표에 요약되어 있습니다.

상수 유형 선언 설명
새로운 공개 정적 최종 Thread.State NEW 방금 생성되었지만 아직 실행을 시작하지 않은 스레드의 스레드 상태입니다.
실행 가능 공개 정적 최종 Thread.State RUNNABLE 이미 실행 중인 스레드 또는 실행할 준비가 된 스레드의 상태를 설명합니다.

동일한 스레드가 JVM(Java Virtual Machine)에 대해서는 실행 가능한 상태이고 프로세서와 같은 다른 운영 체제 리소스에 대해서는 대기 상태일 수 있습니다.

막힌 공개 정적 최종 Thread.State BLOCKED 모니터 잠금을 기다리며 차단된 스레드의 상태를 설명합니다. 모니터 블록이 동기화된 메서드/블록에 들어가거나 Object.wait()를 호출한 후 동기화된 메서드에 다시 들어갈 때까지 동일한 상태를 유지합니다.
대기 중 공개 정적 최종 Thread.State WAITING 다음 메서드 중 하나의 호출로 인해 대기 중인 스레드의 상태를 설명합니다.

  1. 시간 제한 없이 Object.wait
  2. LockSupport.park
  3. 시간 제한 없이 Thread.join

대기 상태는 다른 스레드가 특정 작업을 완료했기 때문일 수 있습니다.

시간 초과 대기 공개 정적 최종 Thread.State TIMED_WAITING 지정된 시간 동안 기다리는 스레드의 상태입니다. 다음 메서드 중 하나를 호출하면 긍정적인 대기 시간이 할당된 스레드의 시간이 지정된 대기 상태가 됩니다.

  1. 제한 시간이 있는 Thread.join
  2. 시간 초과로 Object.wait
  3. LockSupport.partUntil
  4. LockSupport.parkNanos
종료됨 공개 정적 최종 Thread.State TERMINATED 구성 코드 문 실행을 완료한 스레드의 상태입니다.

스레드는 방금 생성되었을 때 NEW 상태에 있습니다. .start() 메서드가 스레드에서 호출되면 스레드 스케줄러에 의해 Runnable 상태로 이동됩니다. 스레드 인스턴스에서 join() 메서드가 호출되면 현재 코드 문을 실행 중인 스레드는 이 스레드가 종료될 때까지 기다립니다. 따라서 콘솔에 최종 명령문을 인쇄하기 전에 프로그램에 의해 스레드 2에서 join() 함수가 호출되고 스레드 2가 실행을 완료하고 종료 상태로 이동할 때까지 스레드 1을 대기 상태로 유지합니다. thread1은 thread2의 실행이 완료되기를 기다리고 있으므로 WAITING 상태가 됩니다.

소프트웨어 개발과 관련된 인기 기사 읽기

Java에서 데이터 추상화를 구현하는 방법은 무엇입니까? Java의 내부 클래스는 무엇입니까? Java 식별자: 정의, 구문 및 예
예제를 통해 OOPS의 캡슐화 이해하기 C의 명령줄 인수 설명 2022년 클라우드 컴퓨팅의 10대 기능 및 특성
Java의 다형성: 개념, 유형, 특성 및 예 Java의 패키지 및 사용 방법? 초보자를 위한 Git 자습서: 처음부터 Git 배우기

Java 프로그램에서 스레드 사용의 장점 및 제한 사항:

Java 프로그램에서 스레드를 사용하면 다음과 같은 이점이 있습니다.

  • 코드 개발 시간 단축
  • 유지 보수 비용 감소
  • 복잡한 애플리케이션의 향상된 성능
  • 사용자 인터페이스의 응답성 향상
  • 작업 병렬화
  • 스레드는 리소스의 높은 처리량과 활용도를 향상시키기 위해 서버 응용 프로그램에서 사용됩니다.
  • 모든 CPU 컴퓨팅 리소스를 스레드에서 사용할 수 없는 경우 다른 스레드를 실행하면 이러한 리소스가 계속 사용됩니다.
  • 동일한 데이터 집합이 여러 스레드에서 작동하는 경우 해당 캐시를 공유할 수 있습니다. 이렇게 하면 캐시를 더 잘 사용하거나 해당 값을 조화시킬 수 있습니다.

Java 프로그램에서 스레드를 사용하는 데는 몇 가지 단점이 있습니다. 그들 중 일부는 아래에 나열되어 있습니다.

  • 캐시, 변환 색인 버퍼(TLB) 또는 기타 하드웨어 리소스를 공유하는 동안 여러 스레드가 서로 간섭할 수 있습니다.
  • 단일 쓰레드만 동작하는 경우에도 쓰레드의 실행시간을 늘릴 수 없다. 그러나 실행 시간의 저하가 허용됩니다. 이는 추가 파이프라인 단계 및/또는 스레드 전환 하드웨어 수용에 필요한 더 느린 주파수 때문일 수 있습니다.
  • 멀티스레딩에서는 하드웨어 지원이 소프트웨어에 더 많이 노출되기 때문에 멀티프로세싱에 비해 운영 체제와 응용 프로그램 모두에서 많은 변경이 필요합니다.

Java, 풀스택 소프트웨어 개발에 대해 자세히 알아보려면 upGrad & IIIT-B의 소프트웨어 개발 총괄 PG 프로그램 – 작업 전문가를 위해 설계되었으며 500시간 이상의 엄격한 교육을 제공하는 풀스택 개발 전문화를 확인하십시오. , 9개 이상의 프로젝트 및 과제, IIIT-B 동문 상태, 실용적인 실습 캡스톤 프로젝트 및 최고 기업과의 취업 지원.

이 기사를 공유하고 싶습니까?

미래의 경력을 준비하십시오

지금 소프트웨어 엔지니어링 석사 지원