>  기사  >  Java  >  TaskExecutor 인터페이스 및 유형 소개

TaskExecutor 인터페이스 및 유형 소개

零下一度
零下一度원래의
2017-06-25 09:39:101863검색

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>
View Code

 

위 내용은 TaskExecutor 인터페이스 및 유형 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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