一TaskExecutor 인터페이스
Spring의 TaskExecutor 인터페이스는 Java.util.concurrent.Executor 인터페이스와 동일합니다. 실제로 이 존재의 주된 이유는 스레드 풀을 사용할 때 Java 5에 대한 종속성을 추상화하기 위한 것입니다. 이 인터페이스에는 스레드 풀의 의미 및 구성에 따라 실행 작업을 허용하는 하나의 메소드 실행(실행 가능 작업)만 있습니다.
TaskExecutor는 원래 필요할 때 다른 Spring 구성 요소에 스레드 풀 추상화를 제공하기 위해 만들어졌습니다. 예를 들어, ApplicationEventMulticaster 구성 요소, JMS의 AbstractMessageListenerContainer 및 Quartz 통합은 모두 TaskExecutor 추상화를 사용하여 스레드 풀을 제공합니다. 물론, Bean에 스레드 풀 동작이 필요한 경우 이 추상화 계층을 사용할 수도 있습니다.
two TaskExecutor 유형
일부 TaskExecutor 구현은 Spring 배포 패키지에 미리 정의되어 있습니다. 이를 사용하면 더 이상 직접 구현할 필요도 없습니다.
SimpleAsyncTaskExecutor 클래스
이 구현은 스레드를 재사용하지 않거나 호출될 때마다 새 스레드를 시작합니다. 그러나 총 동시 스레드 수에 대한 제한 설정은 계속 지원합니다. 총 동시 스레드 수에 대한 제한을 초과하면 위치가 해제될 때까지 새 호출이 차단됩니다. 실제 수영장이 필요하다면 계속 읽어보세요.
SyncTaskExecutor 클래스
이 구현은 비동기적으로 실행되지 않습니다. 대신 각 호출은 호출을 시작한 스레드에서 실행됩니다. 간단한 테스트 케이스처럼 멀티스레딩이 필요하지 않은 경우에 주로 사용됩니다.
ConcurrentTaskExecutor 클래스
이 구현은 Java 5 java.util.concurrent.Executor 클래스에 대한 래퍼입니다. 또 다른 대안인 ThreadPoolTaskExecutor 클래스가 있는데, 이는 Executor의 구성 매개변수를 빈 속성으로 노출합니다. ConcurrentTaskExecutor를 사용할 필요는 거의 없지만 ThreadPoolTaskExecutor가 충분하지 않은 경우 ConcurrentTaskExecutor를 다른 대안으로 사용할 수 있습니다.
SimpleThreadPoolTaskExecutor 클래스
이 구현은 실제로 Spring의 라이프사이클 콜백을 수신하는 Quartz의 SimpleThreadPool 클래스의 하위 클래스입니다. 이는 Quartz와 Quartz가 아닌 구성 요소 간에 공유해야 하는 스레드 풀이 있을 때 일반적으로 사용됩니다.
ThreadPoolTaskExecutor 클래스
java.util.concurrent 패키지의 대체 또는 다운포트를 지원하지 않습니다. Doug Lea와 Dawid Kurzyniec의 java.util.concurrent 구현은 서로 다른 패키지 구조를 사용하므로 올바르게 실행되지 않습니다.
이 구현은 Java 5 환경에서만 사용할 수 있지만 이 환경에서 가장 일반적으로 사용됩니다. 노출된 Bean 속성은 java.util.concurrent.ThreadPoolExecutor를 구성하고 이를 TaskExecutor로 래핑하는 데 사용할 수 있습니다. ScheduledThreadPoolExecutor와 같은 고급 클래스가 필요한 경우 대신 ConcurrentTaskExecutor를 사용하는 것이 좋습니다.
TimerTaskExecutor 클래스
이 구현은 TimerTask를 그 뒤에 있는 구현으로 사용합니다. SyncTaskExecutor와 차이점은 메서드 호출이 별도의 스레드에서 이루어지지만 해당 스레드에서 동기화된다는 점입니다.
WorkManagerTaskExecutor 클래스
CommonJ는 BEA와 IBM이 공동으로 개발한 사양 집합입니다. 이러한 사양은 Java ee 표준은 아니지만 BEA 및 IBM 애플리케이션 서버 구현에 대한 공통 표준입니다.
이 구현은 CommonJ WorkManager를 기본 구현으로 사용하며 Spring 컨텍스트에서 CommonJ WorkManager 애플리케이션을 구성하는 데 가장 중요한 클래스입니다. SimpleThreadPoolTaskExecutor와 유사하게 이 클래스는 WorkManager 인터페이스를 구현하므로 WorkManager로 직접 사용할 수 있습니다.
TaskExcutor의 세 가지 간단한 예
1 taskExcutor
package com.test;import org.springframework.core.task.TaskExecutor;public class MainExecutor { private TaskExecutor taskExecutor; public MainExecutor (TaskExecutor taskExecutor) { this.taskExecutor = taskExecutor; } public void printMessages() { for(int i = 0; i < 25; i++) { taskExecutor.execute(new MessagePrinterTask("Message" + i)); } } private class MessagePrinterTask implements Runnable { private String message; public MessagePrinterTask(String message) { this.message = message; } public void run() { System.out.println(message); } } }
2 main
package com.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TaskTest {//本地测试,不用部署到tomcatpublic static void main(String[] args) { System.out.println("测试任务调度开始..."); ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml"); MainExecutor te = (MainExecutor)appContext.getBean("taskExecutorExample"); te.printMessages(); System.out.println("--------"); } }
3.applicationContext.xml配置
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "/spring-beans.dtd"><beans> <bean id="taskExecutorExample" class="com.test.MainExecutor"> <constructor-arg ref="taskExecutor" /> </bean> <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="5" /> <property name="maxPoolSize" value="10" /> <property name="queueCapacity" value="25" /> </bean></beans>
위 내용은 TaskExecutor 인터페이스 및 유형 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!