>  기사  >  Java  >  Java 스레드 풀

Java 스레드 풀

PHPz
PHPz원래의
2024-08-30 16:03:21905검색

스레드 풀은 이름에서 알 수 있듯이 재사용할 수 있는 스레드 모음입니다. 이러한 스레드는 이전에 생성되었으며 이미 사용 가능한 스레드 컬렉션이 있는 경우 오버헤드에 대한 솔루션을 제공하는 기능을 할 수도 있습니다. 이를 재사용하여 스레드 주기 문제를 해결하고 스레드가 해당 작업을 완료할 때까지 기다릴 수 있습니다. 요청이 도착할 때마다 스레드가 이미 존재하므로 스레드 생성 프로세스가 제거되고 결과적으로 시간이 절약되고 처리 속도가 빨라집니다. 이번 주제에서는 Java Thread Pool에 대해 알아보겠습니다.

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

Java 스레드 풀 작업

스레드 풀의 모든 스레드는 java.util.concurrent의 메소드를 구현합니다. Java 스레드 풀에서 관리하는 스레드 풀이 있습니다. 이 풀을 확인하는 가장 쉬운 방법은 사용하는 스레드가 많을수록 각 스레드가 실제 작업을 수행하는 데 소비하는 시간이 줄어드는 것입니다. 멀티스레딩을 사용할 수 있는 응용프로그램에서 자원을 절약하는데 도움이 되는 방법입니다. 풀용 Java 스레드에 의해 유지 관리되는 대기열이 있습니다.

작업자 스레드는 작업이 할당되고 실행될 때까지 계속 기다립니다. 스레드 풀을 생성하기 위해 Java에서는 ThreadPoolExecutor를 사용합니다. 실행 가능한 스레드 모음은 Java 스레드 풀의 스레드 관리를 담당합니다. 그 후 작업자 스레드가 그림으로 나타나 대기열을 형성합니다. 스레드 풀은 이러한 대기열을 모니터링합니다.

java.util.concurrent.Executors는 스레드 관리에 필요한 팩토리 및 지원 방법을 제공합니다. 이 클래스는 스레드 풀 생성도 담당합니다. 이제 다음 질문은 '이 집행자는 무엇입니까?'입니다. Executor는 유틸리티 클래스의 일부인 다양한 클래스를 제공합니다.

스레드 풀의 기술적 작업은 병렬로 실행될 수 있는 작업으로 분할된 동시 코드가 있는 풀과 같다고 생각할 수 있습니다. 그런 다음 실행을 위해 풀에 제출됩니다. 작업 제출자, 실행자 서비스, 작업 대기열 및 마지막에는 스레드 풀이 있습니다. 패턴은 애플리케이션에 존재하는 스레드 수를 제어하는 ​​데 도움이 될 수 있습니다. 수명 주기를 결정하고 작업을 예약하며 작업 대기열에 들어오는 작업을 유지합니다.

Executorshelper 클래스에는 스레드 풀 인스턴스가 미리 구성된 다양한 메서드가 있습니다. Executor 및 ExecutorService 인터페이스는 풀에서 다양한 구현 작업을 수행하는 데 도움이 됩니다. 코드는 실제 구현 전에 분리된 형식이어야 합니다. 사용되는 또 다른 인터페이스가 있습니다. ThreadPoolExecutor입니다. 이는 많은 매개변수를 지정할 수 있는 확장 가능한 스레드 풀 구현이며 미세 조정이 가능합니다. 사용할 수 있는 매개변수에는 코어 풀 크기, 최대 풀 크기 및 연결 유지 시간이 포함됩니다. 대기열은 최대 풀 크기까지만 증가할 수 있습니다.

Java 스레드 풀 예시

풀을 만들고 어떻게 작동하는지 살펴보겠습니다.

코드:

import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
// The Job class will be executed in this case
class Job implements Runnable
{
private String name;
public Job(String s)
{
name = s;
}
// The task name will be populated first for the ones which were not running already, and the thread will sleep for 2s
//This entire method will be repeated 6 times
public void run()
{
try
{
for (int i = 0; i<=5; i++)
{
if (i==0)
{
Date d = new Date();
System.out.println("We are in "
+ " task name - "+ name);
//prints the task name every time the new task is started
}
else
{
System.out.println("The job "+
name +" is already running ");
// prints the job name which is already running
}
Thread.sleep(2000); // The thread is in sleep mode for 2 secs
}
System.out.println(name+" job is completes");
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
public class Test
{
// Here we define the maximum threads we have
static final int MAX_Threads= 5;
public static void main(String[] args)
{
Runnable run1 = new Job("task 1");
Runnable run2 = new Job("task 2");
Runnable run3 = new Job("task 3");
//A new thread pool is created with maximum number of threads
ExecutorService newpool = Executors.newFixedThreadPool(MAX_Threads);
newpool.execute(run1);
newpool.execute(run2);
newpool.execute(run3);
newpool.shutdown();
}
}

위 코드는 스레드가 종료될 때까지 스레드 생성의 각 단계를 다룹니다. 최대 스레드 제한이 고정되어 생성되었습니다. 이 작업이 완료되면 하나씩 실행되는 세 가지 작업이 생성됩니다. 또한 각 직업별로 2초의 수면 시간이 할당되어 있습니다. 스레드 풀이 생성되고 모든 작업이 동시에 작동하므로 이 전체 프로세스가 6번 실행되는 것을 볼 수 있습니다. if 문이 스레드 풀에서 실행되면 작업이 이미 실행 중인지 확인합니다. 작업 실행이 시작되지 않은 경우 if 블록이 실행됩니다. 이미 실행 중이면 else 블록이 실행됩니다. 작업 이름이 표시되고 이미 실행 중이라는 메시지가 표시됩니다. 스레드 풀이 생성된 후 3개의 작업이 모두 실행됩니다. 작업이 실행되면 생성한 스레드 풀을 종료합니다.

다음은 해당 프로그램의 출력입니다.

출력:

Java 스레드 풀

모든 작업이 완료될 때까지 실행됩니다.

스레드 풀의 장점과 단점

Java의 Thread Pool에는 여러 가지 장점이 있습니다. 몇 가지를 꼽자면 주요 장점은 다음과 같습니다.

  • CPU와 프로그램의 성능이 더 좋고 효율적으로 향상됩니다.
  • 다른 스레드가 모든 프로세스를 수행하므로 시간이 절약됩니다.
  • 스레드 풀의 가장 큰 장점은 이미 존재하는 스레드를 재사용할 수 있다는 것입니다. 새 스레드를 계속해서 만들 필요가 없습니다.
  • 실시간 데이터 작업에 도움이 되는 실시간 액세스를 제공합니다.

하지만 스레드 풀에는 몇 가지 단점도 있습니다. 단점은 다음과 같습니다.

  • 작업의 우선순위를 설정할 수 없으며, 추적할 수도 없습니다.
  • 더 많이 사용하면 자동으로 삭제될 수 있습니다.

결론

결과적으로 스레드 풀은 우리가 수행하는 여러 작업을 처리하는 효율적인 방법입니다. Java는 스레드를 재사용하고 기존 리소스를 활용할 수 있는 기능을 제공합니다.

위 내용은 Java 스레드 풀의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Java의 데몬 스레드다음 기사:Java의 데몬 스레드