springboot操作创建线程池

线程池创建:

ExecutorService

方式一:首先引入:commons-lang3包

ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,
        new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());

方式二:首先引入:com.google.guava包

 ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
        .setNameFormat("demo-pool-%d").build();
 
    //Common Thread Pool
    ExecutorService pool = new ThreadPoolExecutor(5, 200,
        0L, TimeUnit.MILLISECONDS,
        new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
 
    pool.execute(()-> System.out.println(Thread.currentThread().getName()));
    pool.shutdown();//gracefully shutdown

方式三:

spring配置线程池方式:自定义线程工厂bean需要实现ThreadFactory,可参考该接口的其它默认实现类,使用方式直接注入bean

调用execute(Runnable

task)方法即可

<bean id="userThreadPool"
        class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="10" />
        <property name="maxPoolSize" value="100" />
        <property name="queueCapacity" value="2000" />
 
    <property name="threadFactory" value= threadFactory />
        <property name="rejectedExecutionHandler">
            <ref local="rejectedExecutionHandler" />
        </property>
    </bean>
    //in code
    userThreadPool.execute(thread);

项目中使用:

1.线程池配置创建

@Configuration
@EnableAsync
public class TaskExecutePool {

    @Autowired
    private TaskThreadPoolConfig config;

    @Bean
    public  ExecutorService getFixedThreadPool(){
        ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
                .setNameFormat("Jane-pool-%d").build();
        //Common Thread Pool
        ExecutorService pool = new ThreadPoolExecutor(config.getCorePoolSize(), config.getMaxPoolSize(),
                config.getKeepAliveSeconds(), TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<Runnable>(config.getQueueCapacity()), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
        pool.execute(()-> System.out.println(Thread.currentThread().getName()));
        // pool.shutdown();//gracefully shutdown
        return pool;
    }

}

2.线程池参数配置类

@Component
@ConfigurationProperties(prefix = "task.pool")
public class TaskThreadPoolConfig {

    private int corePoolSize;

    private int maxPoolSize;

    private int keepAliveSeconds;

    private int queueCapacity;
    }

3.yml文件参数配置

#线程池配置
task:
  pool:
    corePoolSize: 3
    queueCapacity: 1024
    maxPoolSize: 1500
    keepAliveSeconds: 300

发布了10 篇原创文章 · 获赞 15 · 访问量 1665

猜你喜欢

转载自blog.csdn.net/weixin_44761211/article/details/105518284