Java并发编程——线程池的使用(二) 手动创建线程池以及线程池的拒绝策略

一、线程池的普通创建

        我们也可以直接手动创建一个线程池
ThreadPoolExecutor executor = new ThreadPoolExecutor(
                5,
                10,
                60,
                TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(),
                new MyThread(),
                new ThreadPoolExecutor.AbortPolicy());


参数说明:

5条核心线程

10条最大线程

60秒回收空闲线程

单位:秒,和之前的60对应

自定义子线程

阻塞队列,上一篇博客已经讲到过

任务拒绝策略


        这里只有两个参数是比较陌生的:自定义子线程和任务拒绝策略。

        先说自定义子线程

public class MyThread implements ThreadFactory {
    @Override
    public Thread newThread(@NonNull Runnable r) {
        Thread thread = new Thread(r);
        thread.setName("testThread");
        return thread;
    }

        其实就是把线程池里的子线程换成我们自己用线程工厂创建的线程,需要实现ThreadFactory 接口,重写newThread方法。

       

        然后是任务拒绝策略,当任务队列的任务满了,继续添加任务后,所执行的拒绝策略:

ThreadPoolExecutor.AbortPolicy():被拒绝后抛出RejectedExecutionException异常
ThreadPoolExecutor.CallerRunsPolicy():被拒绝后给调用线程池的线程处理
ThreadPoolExecutor.DiscardOldestPolicy():被拒绝后放弃队列中最旧的未处理的任务
ThreadPoolExecutor.DiscardPolicy():被拒绝后放弃被拒绝的任务(当前新添加的任务)


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值