zoukankan      html  css  js  c++  java
  • ThreadPoolTaskScheduler的使用

    配置线程池

    package com.example.demo.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
    
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.concurrent.ScheduledFuture;
    
    /**
     * @author lyd
     * @Description:
     * @date 15:23
     */
    @Configuration
    public class ThreadSchedulerConfig {
    	
    	/**
    	 * 线程存储器
    	 */
    	public static ConcurrentHashMap<String, ScheduledFuture> map = new ConcurrentHashMap<String, ScheduledFuture>();
    
    
    	@Bean
    	public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
    		ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
    		// 配置池子的大小
    		threadPoolTaskScheduler.setPoolSize(20);
    		// 设置名字
    		threadPoolTaskScheduler.setThreadNamePrefix("taskExecutor-");
    		// 设置等待任务在关机时完成
    		threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
    		// 设置等待终止时间
    		threadPoolTaskScheduler.setAwaitTerminationSeconds(60);
    
    		return threadPoolTaskScheduler;
    	}
    
    
    
    }
    

    编写任务类,实现启动、停止功能

    package com.example.demo.task;
    
    import com.example.demo.DemoApplication;
    import com.example.demo.config.ThreadSchedulerConfig;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Scope;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
    import org.springframework.scheduling.support.CronTrigger;
    import org.springframework.stereotype.Component;
    
    import java.util.concurrent.ScheduledFuture;
    
    
    /**
     * @author lyd
     * @Description:
     * @date 15:32
     */
    @Component
    @Scope("prototype")//多例
    public class DynamicTask {
    
    	Logger logger = LoggerFactory.getLogger(DynamicTask.class);
    
    	String cron;
    
    	@Autowired
    	ThreadPoolTaskScheduler threadPoolTaskScheduler;
    
    	ScheduledFuture scheduledFuture;
    
    	/**
    	 * 传入定时任务
    	 */
    	public void startCron() {
    
    		cron = "0/1 * * * * ?";
    		System.out.println(Thread.currentThread().getName());
    		String name = Thread.currentThread().getName();
    		scheduledFuture = threadPoolTaskScheduler.schedule(new myTask(name), new CronTrigger(cron));
    		ThreadSchedulerConfig.map.put(name, scheduledFuture);
    	}
    
    
    	public void stop(ScheduledFuture future) {
    		if (future != null) {
    			future.cancel(true);
    		}
    	}
    
    	/**
    	 * 写一个任务需求
    	 */
    	private class myTask implements Runnable {
    		private String name;
    
    		myTask(String name) {
    			this.name = name;
    		}
    
    		@Override
    		public void run() {
    			System.out.println("test:" + name);
    		}
    	}
    
    }
    

    测试接口

    
    import com.example.demo.config.ThreadSchedulerConfig;
    import com.example.demo.task.DynamicTask;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import java.util.concurrent.ScheduledFuture;
    
    /**
     * @author lyd
     * @Description:
     * @date 16:06
     */
    @RestController
    public class TestController {
    
    	@Autowired
    	DynamicTask dynamicTask;
    
    	@RequestMapping("startTask")
    	public void startTask() {
    		// 开启定时任务,多例
    		dynamicTask.startCron();
    	}
    
    	@RequestMapping("stopTask")
    	public void stopTask() {
    		ScheduledFuture scheduledFuture = ThreadSchedulerConfig.map.get("http-nio-8080-exec-1");
    		dynamicTask.stop(scheduledFuture);
    	}
    
    }
    
  • 相关阅读:
    TCP四种计时器
    TCP滑动窗口机制的简洁模型
    JAVA安全模型
    MongoDB性能优化
    mysql权限管理
    一个类似抖音 APP 拍摄按钮效果的控件
    App 组件化/模块化之路——使用SDK的思路进行模块化设计接口
    在 Android 中如何优雅地配置私密信息
    在Android中使用枚举注解而不是枚举
    Android 组件化/模块化之路——在展示层搭建MVP结构
  • 原文地址:https://www.cnblogs.com/lyd447113735/p/14955337.html
Copyright © 2011-2022 走看看