线程池
futuretask+callable
返回值不是Thread 而是FutureTask
new Thread(new FutureTask(()-> return 1))
类型(不用)
都是executors下面的
newCachedThreadPool:可缓存 >> 可能创建大量线程
newFixedThreadPool: 指定工作线程数量 >> 允许的请求队列长度
newSingleThreadExecutor: 唯一的工作线程 >> 和上面一样
newScheduleThreadPool: 定时的以及周期性
newSingleThreadScheduledExecutor: 单线程执行+延期
CachedThreadPool => 允许创建的线程数为Integer.MAX_VALUE,可能会创建大量的线程,从而引起OOM异常
参数(自己创建)
ThreadPoolExecutor直接new就行
核心线程数+最大线程数+时间+时间单位+阻塞队列+拒绝策略
ExecutorService executor = new ThreadPoolExecutor(3, 5, 1000,
TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(2),
new ThreadPoolExecutor.CallerRunsPolicy());
拒绝策略
中止abort+丢弃discard+丢弃老discardoldest+调用callerruns