java中的线程池

  • 线程池的5中创建方式:

 

  1. Single Thread Executor : 只有一个线程的线程池,因此所有提交的任务是顺序执行,

代码: Executors.newSingleThreadExecutor()

 

  1. Cached Thread Pool : 线程池里有很多线程需要同时执行,老的可用线程将被新的任务触发重新执行,如果线程超过60秒内没执行,那么将被终止并从池中删除

代码:Executors.newCachedThreadPool()

 

  1. Fixed Thread Pool : 拥有固定线程数的线程池,如果没有任务执行,那么线程会一直等待

代码: Executors.newFixedThreadPool(4)

在构造函数中的参数4是线程池的大小,你可以随意设置,也可以和cpu的核数量保持一致,获取cpu的核数量int cpuNums = Runtime.getRuntime().availableProcessors();

 

  1. Scheduled Thread Pool : 用来调度即将执行的任务的线程池,可能是不是直接执行, 每隔多久执行一次... 策略型的

代码:Executors.newScheduledThreadPool()

 

  1. Single Thread Scheduled Pool : 只有一个线程,用来调度任务在指定时间执行,代码Executors.newSingleThreadScheduledExecutor()

线程池的用法

提交 Runnable ,任务完成后 Future 对象返回 null

调用excute,提交任务, 匿名Runable重写run方法, run方法里是业务逻辑

java中的线程池

提交 Callable,该方法返回一个 Future 实例表示任务的状态

调用submit提交任务, 匿名Callable,重写call方法, 有返回值, 获取返回值会阻塞,一直要等到线程任务返回结果

java中的线程池

java中的线程池