面试高频— —线程池

线程池— —必知必会

  • 线程池优势

  • Callable接口
    Runnable - FutureTask - Callable (适配器模式)
    *高考遇到不会的题,先跳过,后面再回来做

  • 获得线程的4种方法:
    Thread
    Runnable
    Callable
    线程池

  • 线程池3个常用方式(线程池底层:ThreadPoolExecutor)
    Executors.newFixedThreadPool(5);
    Executors.newSingleThreadExecutor();
    Executors.newCachedThreadPool();

①线程池用过吗?底层是如何实现的?

  • 线程池7大参数
    corePoolSize
    maximumPoolSize
    keepAliveTIme
    unit
    workQueue 阻塞队列:候客区
    theadFactory 用于创建线程
    handler 拒绝策略

  • 线程池底层工作原理
    核心线程数满了 > 阻塞队也列满了(候客区)> 填派人员(maximumPoolSize)

② 请你谈谈线程池的拒绝策略?
等待队列满了,也达到了最大线程数 > 拒绝策略
·AbortPolicy(默认) 报异常
·CallerRunsPolicy 将某些任务回退到调用者
·DiscardOldestPolicy 丢弃等待时间最久的
·DiscardPolicy 直接丢弃

③你在工程中是否使用过线程池?是否自定义过线程池?
》线程池不使用Executors去创建,而是通过ThreadPoolExecutor方式(手写线程池)

import java.util.concurrent.*;

public class MyThreadPoolDemo {
    public static void main(String[] args) {
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2,5, 1L, TimeUnit.SECONDS,
                new LinkedBlockingDeque<>(3),
                Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardOldestPolicy());
        try {
            for (int i = 1; i <= 10 ; i++) {
                threadPool.execute(() -> {
                    System.out.println(Thread.currentThread().getName() + "\t 办理业务");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            threadPool.shutdown();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值