java ThreadPoolExecutor

该代码示例展示了如何在SpringBoot应用中创建并使用ThreadPoolExecutor进行任务调度。Controller通过@GetMapping注解响应HTTP请求,执行线程池的相关操作,如获取线程池状态(线程数量、活跃任务、等待队列等),并提交新的任务到线程池执行。
摘要由CSDN通过智能技术生成
package spring.batch.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

@RestController
public class TestThreadPoolExecutorController {
    private ThreadPoolExecutor es = new ThreadPoolExecutor(0, 1, 5, TimeUnit.MINUTES,new LinkedBlockingQueue<>(2000));

    @GetMapping("/test/thread/pool")
    public String exeTask() {
        // 获取当前线程池中线程数量
        int poolSize = es.getPoolSize();
        // 获取正在执行任务的线程数量
        int activeCount = es.getActiveCount();
        // 获取等待执行的任务数量
        int queueSize = es.getQueue().size();

//       getCompletedTaskCount:已经执行完成的任务数量
//       getLargestPoolSize:线程池里曾经创建过的最大的线程数量。这个主要是用来判断线程是否满过。
//       getActiveCount:获取正在执行任务的线程数据
//       getPoolSize:获取当前线程池中线程数量的大小

        System.out.println("当前空闲数量: " + (poolSize - activeCount));
        System.out.println("工作数量: " + activeCount);
        System.out.println("总数量: " + poolSize);
        System.out.println("等待数量: " + queueSize);
        System.out.println("已经执行完成的任务数量: " + es.getCompletedTaskCount());
        System.out.println("线程池里曾经创建过的最大的线程数量: " + es.getLargestPoolSize());


        for(int i=0;i<20;i++) {
            es.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println("线程号 : " + Thread.currentThread().getId());
                    try {
                        Thread.sleep(1 * 1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public String toString() {
                    return "------------ test obj -------------";
                }
            });
        }

        // 获取当前线程池中线程数量
         poolSize = es.getPoolSize();
        // 获取正在执行任务的线程数量
         activeCount = es.getActiveCount();
        // 获取等待执行的任务数量
         queueSize = es.getQueue().size();

//       getCompletedTaskCount:已经执行完成的任务数量
//       getLargestPoolSize:线程池里曾经创建过的最大的线程数量。这个主要是用来判断线程是否满过。
//       getActiveCount:获取正在执行任务的线程数据
//       getPoolSize:获取当前线程池中线程数量的大小

        System.out.println("当前空闲数量: " + (poolSize - activeCount));
        System.out.println("工作数量: " + activeCount);
        System.out.println("总数量: " + poolSize);
        System.out.println("等待数量: " + queueSize);
        System.out.println("已经执行完成的任务数量: " + es.getCompletedTaskCount());
        System.out.println("线程池里曾经创建过的最大的线程数量: " + es.getLargestPoolSize());
        return "back exe";
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值