线程池

为什么用线程池

        (1)降低资源的消耗;(2)提高响应速度;(3)提高线程的可管理性

合理配置线程池

        首先要确定任务的特性。Cpu密集型(配置的线程数最大不要超过cpu的核心数加1);io密集型(cup核心数*2比较合适。Nthreads=NCPU*UCPU*(1+W/C) NCPU是cpu核心数量,UCPU是期望的CPU利用率(该值介于0和1之间)W/C是等待时间与计算时间的比率);混合型(如何可以拆分将其拆分成一个cpu密集型和io密集型,如果执行时间相差太大,则没必要分解)。获得cup核心数的方法Runtime.getRuntime().availableProcessors().

        使用ScheduleThreadPoolExecutor四种执行方式:只执行一次schedule;固定延时时间间隔执行的任务scheduleWithFixedDelay;固定时间间隔执行的任务scheduleAtFixedRate;

        schedule如果不用try catch的话会吞掉异常,一定要用try catch。

Executor使用流程(见图)


CompletionService作用

        谁先执行完就可以拿到先执行完的结果。

谁先执行完就可以拿到先执行完的结果。

你可能感兴趣的:(线程池)