Java의 멀티스레딩 설명 [예제 포함]
게시 됨: 2021-06-15목차
자바의 쓰레드
Java의 스레드는 프로그램의 효율적인 작동을 지원합니다. proforma 실행의 두 가지 기본 단위는 프로세스와 스레드입니다. 프로세스는 응용 프로그램, 프로그램 또는 자체 포함 실행 환경일 수 있습니다.
스레드는 프로세스의 리소스를 공유하고 함께 존재합니다. 기본 스레드라고 하는 모든 Java 응용 프로그램에는 최소한 하나의 스레드가 있습니다. 기본 스레드에서 여러 스레드를 만들 수 있습니다. Java에서 스레드를 만드는 방법에 대해 자세히 알아보세요.
자바 쓰레드의 장점
- 프로세스에 비해 스레드를 생성하는 데 필요한 시간과 리소스가 적습니다. 따라서 스레드는 경량 프로세스라고도 합니다.
- 상위 프로세스 데이터와 코드는 스레드에서 공유됩니다.
- 스레드 간의 상호 통신은 프로세스의 상호 통신에 비해 쉽습니다.
- Java의 스레드는 java.lang의 구현을 통해 생성할 수 있습니다. 실행 가능한 인터페이스.
단일 스레드
여러 처리 장치가 프로그램에 존재하며 그 중 가장 작은 것을 단일 스레드라고 합니다. "스레드 클래스"를 사용하여 Java는 스레드를 적용합니다. 스레드에는 두 가지 유형이 있습니다. 데몬 스레드와 사용자 스레드.
응용 프로그램을 정리할 때 데몬 스레드를 사용합니다. 애플리케이션의 백그라운드에서 실행됩니다. 응용 프로그램이 처음 시작될 때 사용자 스레드가 생성되는 동안.
단일 스레드의 장점:
- 시스템에서 단일 스레드의 실행이 발생하므로 애플리케이션 오버헤드가 감소합니다.
- 단일 스레드를 사용하여 응용 프로그램의 유지 관리 비용이 절감됩니다.
자바의 멀티태스킹
멀티태스킹은 CPU가 한 번에 여러 작업을 수행하는 프로세스를 의미합니다. 때때로 CPU 전환은 사용자가 각 프로그램과 함께 협업하기 위해 작업 간에 수행될 수 있습니다. 멀티태스킹에서는 별도의 메모리와 리소스가 프로세스에 할당됩니다. 두 가지 방법으로 멀티태스킹을 수행할 수 있습니다.
1. 멀티프로세싱(프로세스 기반 멀티태스킹)
- 각 프로세스마다 별도의 메모리 영역이 할당됩니다. 따라서 메모리에는 각 프로세스에 대한 주소가 있습니다.
- 프로세스가 무겁습니다.
- 프로세스 간의 통신 비용이 높습니다.
- 프로세스 사이를 전환하는 데 약간의 시간이 필요합니다. 이것은 목록, 메모리 맵 등을 업데이트하는 데 필요합니다.
2. 멀티스레딩(스레드 기반 멀티태스킹)
- 스레드 간에 동일한 주소가 공유됩니다.
- 스레드는 가볍습니다.
- 스레드 간의 통신 비용이 낮습니다.
멀티스레딩이란?
둘 이상의 스레드가 프로그램에서 동시에 실행되는 경우 메커니즘을 멀티스레딩이라고 합니다. 단일 프로세스는 계산 능력을 증가시키는 많은 스레드를 생성합니다. 프로그램의 두 개 이상의 부분이 CPU를 최대한 활용하는 방식으로 실행됩니다.
스레드는 프로그램의 개별 부분이라고 합니다. 애플리케이션의 프로세스는 다중 스레드 또는 단일 스레드를 포함할 수 있습니다.
Java Virtual Machine은 애플리케이션의 다중 스레드를 허용합니다. 모든 스레드에는 고유한 우선 순위가 있습니다. 따라서 우선 순위가 낮은 스레드보다 우선 순위가 높은 스레드가 우선적으로 실행됩니다.
멀티태스킹을 달성하기 위해 멀티스레딩 프로세스와 멀티프로세싱 프로세스가 모두 사용됩니다. 공유 메모리 영역은 멀티스레딩에서 사용되기 때문에 주로 멀티프로세싱보다 많이 사용됩니다. 추가 메모리 할당이 필요하지 않으므로 메모리가 저장됩니다. 또한 스레드 간에 컨텍스트 전환이 발생하므로 멀티프로세싱에 비해 소요 시간이 짧습니다.
애니메이션, 게임에서는 Java 멀티스레딩 이 사용됩니다. Java 아키텍처 및 구성 요소에 대해 자세히 알아보려면 클릭하십시오.
스레드 생성에는 두 가지 메커니즘을 사용할 수 있습니다.
1. 스레드 클래스 확장
2. 실행 가능한 인터페이스 구현
스레드 클래스 대 실행 가능한 인터페이스
- Java에서는 다중 상속이 지원되지 않으므로 "스레드 클래스" 확장은 다른 클래스를 확장할 수 없습니다. 그러나 "Runnable" 인터페이스를 구현하면 해당 클래스에서 다른 기본 클래스를 확장할 수 있습니다.
- Interrupt(), yield() 등과 같은 내장 메서드가 제공되므로 Thread 클래스를 확장하여 스레드의 기본 기능을 확장할 수 있습니다.
- 여러 스레드가 공유할 수 있는 AN 개체는 runnable이 사용될 때 제공됩니다.
자바 스레드 클래스
Java의 스레드 프로그래밍은 스레드 클래스를 통해 수행됩니다. 생성자는 스레드 작업을 수행하기 위한 스레드 클래스 및 메소드에 의해 제공됩니다. 스레드 클래스는 실행 가능한 인터페이스를 구현하고 Object 클래스를 확장합니다.
사용되는 몇 가지 일반적인 스레드 방법은 다음과 같습니다.
- start(): 이 메서드에 의해 스레드 실행이 시작됩니다. run() 메소드는 JVM에 의해 호출됩니다.
- sleep(int milliseconds): 이 메서드를 통해 스레딩 프로세스가 절전 모드로 전환될 때 제공되는 밀리초 동안 스레드 실행이 일시 중지됩니다. 일시 중지 후 스레드 실행이 다시 시작됩니다. 이 방법을 통해 스레드를 동기화할 수 있습니다.
- getName(): 이 메서드를 통해 스레드 이름이 반환됩니다.
- setPriority(int new priority): 이 메서드를 통해 스레드 우선 순위가 변경됩니다.
- yield(): 이 메소드에 의해 다른 쓰레드의 실행과 함께 현재 쓰레드를 정지시킨다.
- run(): 메서드는 스레드에서 작업을 시작하기 위한 것입니다.
- getPriority(): 이 메서드를 사용하여 스레드 우선 순위가 반환됩니다.
- setName(): 이 메서드를 통해 스레드 이름을 변경합니다.
- getId(): 이 메서드를 통해 스레드 ID가 반환됩니다.
- suspend(): 이 메서드를 통해 스레드가 일시 중단됩니다.
스레드 수명 주기
스레드 수명 주기에는 다음과 같은 다양한 단계가 있습니다.
- 신규: "Thread 클래스"는 이 단계에서 스레드를 생성하는 데 사용됩니다. 스레드가 시작될 때까지 프로그램은 이 단계에 머물러 있습니다. 이 메서드를 태어난 스레드라고도 합니다.
- Runnable: 시작 메서드는 스레드 수명 주기의 이 단계에서 스레드 인스턴스를 호출합니다. 스케쥴러는 실행을 끝내기 위해 쓰레드의 제어와 함께 넘겨진다. 스레드가 실행되어야 하는지 여부는 스케줄러에 따라 다릅니다.
- Running: 쓰레드의 실행이 시작되면 'running' 단계로 이동한다. 스레드 풀에서 스케줄러에 의해 하나의 스레드가 선택되고 애플리케이션 실행이 시작됩니다.
- Waiting : 이름에서 알 수 있듯이 이 라이프사이클 단계에서 스레드는 대기합니다. 스레드 동기화는 응용 프로그램에서 여러 스레드를 실행하기 때문에 필수적입니다. 따라서 다른 스레드의 실행이 끝날 때까지 스레드가 대기할 필요가 있습니다. 따라서 수명 주기의 단계를 대기 단계라고도 합니다.
- Dead: 스레드의 종료가 발생하는 단계를 "죽은" 단계라고 합니다. 스레드가 실행 중에서 처리 끝까지 전송되면 종료되어 "데드 상태"가 됩니다.
Java의 스레드 동기화
멀티스레딩의 경우 프로그램에서 비동기 동작이 발생합니다. 한 스레드를 통해 데이터를 쓰는 것으로 가정하고 다른 스레드에서 데이터 읽기를 동시에 수행하면 응용 프로그램에서 불일치가 생성될 수 있습니다.
스레드 간에 공유되는 리소스는 다른 스레드에서 액세스해야 합니다. 따라서 이러한 경우 동기화 접근 방식을 사용합니다. 동기화 동작을 달성하기 위해 Java에서 동기화된 메소드를 사용할 수 있습니다.
스레드가 동기화된 블록에 도달하면 도달하면 동일한 개체의 다른 스레드에서 메서드를 호출할 수 없습니다. 스레드가 블록 실행을 완료하고 블록에서 나갈 때까지 다른 스레드는 정지하고 기다려야 합니다.
세계 최고의 대학에서 온라인으로 소프트웨어 과정 을 배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.
멀티스레딩의 장점
- 여러 작업을 동시에 수행할 수 있습니다. 독립 스레드가 실행 중이면 사용자가 차단되지 않습니다.
- 여러 작업이 함께 실행되므로 시간이 절약됩니다.
- 스레드는 독립적이므로 다른 스레드의 영향을 받을 수 없습니다. 한 스레드에서 예외가 발생해도 다른 스레드의 실행에는 영향을 미치지 않습니다.
멀티스레딩의 예
Java의 멀티스레딩 프로그램의 예는 다음과 같습니다.
원천
그림 1: 멀티스레딩 코드 예제의 스니펫
코드 설명
3행: "GuruThread1" 클래스는 실행 가능을 구현합니다.
8행: 클래스의 메인 메소드를 표시합니다.
9행: 스레드 클래스가 인스턴스화되고 "guruThread1" 인스턴스가 생성되고 스레드가 생성됩니다.
10행: "Thread class"가 인스턴스화되고 "guruThread2" 인스턴스와 스레드가 생성됩니다.
11행: guruThread1이라는 스레드가 시작되었습니다.
12행: guruThread2라는 스레드가 시작되었습니다.
13행: "Thread names are following:" 텍스트가 출력됩니다.
14행: getName() 메서드는 thread1 이름을 가져오는 데 사용됩니다.
15행: getName() 메서드를 사용하여 thread2 이름을 가져옵니다.
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
원천
그림: Java의 멀티스레딩 프로그램에서 생성된 출력 스크린샷 (
결론
이 기사에서는 Java의 다중 스레딩 프로그램 예제와 함께 Java의 다중 스레딩 개념에 대해 설명했습니다. 학습은 여기서 멈추지 않고 Java의 다른 모든 기본 개념과 함께 합니다.
저렴한 비용으로 프로그래밍 기술을 마스터하고 업계에서 준비하는 데 관심이 있다면 upGrad "컴퓨터 공학 석사"에서 제공하는 과정을 확인할 수 있습니다. 21세에서 45세 사이의 모든 중간 수준 전문가를 대상으로 합니다. 이 과정은 리버풀 존 무어스 대학교(Liverpool John Moores University)의 인증을 받았으며 500시간 이상의 학습, 309개 프로젝트 및 과제로 설계되어 최고의 결과를 얻을 수 있습니다. 질문이 있는 경우 메시지를 보내주시면 저희 팀에서 연락을 드릴 것입니다.