스프링 다중 스레드와 시간 작업 상세 설명

4503 단어 spring타이머
이 글은spring의 다중 스레드의 사용과 시간 작업의 사용을 주로 묘사합니다.
1.spring 다중 스레드 작업 사용
spring은 작업 수행기 TaskExecutor를 통해 다중 루틴과 병렬 프로그래밍을 실현합니다.일반적으로 ThreadPoolTaskExecutor를 사용하여 스레드 풀 기반의 TaskExecutor를 구현합니다.
우선 AsyncConfigurer라는 인터페이스를 실현하려면 스레드 탱크를 여는 것이 목적이다
코드는 다음과 같습니다.

package com.foreveross.service.weixin.test.thread;

import java.util.concurrent.Executor;

import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

/**
 *  
 * @author mingge
 *
 */

@Configuration
@ComponentScan("com.foreveross.service.weixin.test.thread")
@EnableAsync
public class TaskExecutorConfig implements AsyncConfigurer {

  @Override
  public Executor getAsyncExecutor() {
    ThreadPoolTaskExecutor taskExecutor=new ThreadPoolTaskExecutor();
    taskExecutor.setCorePoolSize(5);
    taskExecutor.setMaxPoolSize(20);
    taskExecutor.setQueueCapacity(25);
    taskExecutor.initialize();
    return taskExecutor;
  }

  @Override
  public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
    return null;
  }

  
}

그리고 클래스를 주입하여 당신의 업무를 실현하고 당신의 Bean 방법에서 @Async 주석을 사용하여 비동기적인 임무임을 성명합니다
코드는 다음과 같습니다.

package com.foreveross.service.weixin.test.thread;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

/**
 *  
 * @author mingge
 *
 */
@Service
public class TaskService {

  @Async
  public void executeAsyncTask(int i){
    System.out.println(" :"+i);
  }
  
  @Async
  public void executeAsyncTask1(int i){
    System.out.println(" 1:"+(i+i));
  }
}

마지막으로 테스트를 통해 당신의 실현이 비동기적으로 실행되었다는 것을 볼 수 있습니다.

package com.foreveross.service.weixin.test.thread;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;


/**
 * 
 * @author mingge
 *
 */
public class Test {

  public static void main(String[] args) {
    AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(TaskExecutorConfig.class);
    TaskService taskService=context.getBean(TaskService.class);
    for(int i=0;i<20;i++){
      taskService.executeAsyncTask(i);
      taskService.executeAsyncTask1(i);
    }
    // 
    context.close();
  }
}

2.spring 정시 작업 사용
자바 원생태에서 우리는timer를 사용하면 됩니다. 여기서 스프링에서의 정시 작업의 사용을 설명합니다.

package com.foreveross.service.weixin.test.thread;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

@Configuration
@ComponentScan("com.foreveross.service.weixin.test.thread")
@EnableScheduling// 
public class TaskSchedulerConfig {

}

package com.foreveross.service.weixin.test.thread;

import java.util.Date;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

@Service
public class TimerTaskJob {

  @Scheduled(fixedRate=2000)
  public void test(){
    System.out.println(" :"+new Date().getSeconds());
  }
}

package com.foreveross.service.weixin.test.thread;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class TestTimer {
  public static void main(String[] args) {
    AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(TaskSchedulerConfig.class);
    
    //context.close();
  }
}
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기