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

一、线程池的普通创建

        我们也可以直接手动创建一个线程池
ThreadPoolExecutor executor = new ThreadPoolExecutor(
                5,
                10,
                60,
                TimeUnit.SECONDS, new LinkedBlockingQueue(),
                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():被拒绝后放弃被拒绝的任务(当前新添加的任务)


你可能感兴趣的:(Java)