JDK自带的构建线程池的方式之newWorkStealingPool

newWorkStealingPool和之前的几种线程池的创建方式有很大的不同,之前定长、单例、缓存、定时任务的四大线程池都是基于ThreadPoolExecutor去实现的。newWorkStealingPool则是基于ForkJoinPool的方式构建出来的。

ThreadPoolExecutor的核心特点

只有一个阻塞队列DelayedWorkQueue用来存放当前任务。下图中显而易见四个任务在此队列中阻塞等待,有一个任务来了那就被其中一个线程拿取消费。
JDK自带的构建线程池的方式之newWorkStealingPool_第1张图片

ForkJoinPool的核心特点

分叉连接池。当有一个特别大的任务,ForkJoinPool区别于上述四大线程池将大任务交给某一个线程去执行的方式。ForkJoinPool线程池工作的特点就是将这个大任务拆分为多个小任务,放到当前线程的阻塞队列中。其他线程就可以去处理有不同阻塞队列中的线程任务。
JDK自带的构建线程池的方式之newWorkStealingPool_第2张图片

代码效果使用演示

  • 单线程的效果演示
    JDK自带的构建线程池的方式之newWorkStealingPool_第3张图片
  • 多线程的效果演示
    JDK自带的构建线程池的方式之newWorkStealingPool_第4张图片

拆分任务的时候不是越多越好。任务体量要大,耗时要长!

你可能感兴趣的:(Java并发编程,java,开发语言)