线程池怎么保证线程按次序执行任务?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池怎么保证线程按次序执行任务?相关的知识,希望对你有一定的参考价值。

参考技术A 我们知道线程池可以分为 newCachedThreadPool、newSingleThreadPool、newFixThreadPool、newScheduleThreadPool、newWorkStealingPool (jdk1.8新增)等5种 , 项目上我们使用的时候还是建议使用ThreadPoolExecutor来构建线程池,至于为什么我们后面在各种线程池的比较文章中详细描述。但是这5种线程池也有独特适用于某种场景的应用

根据以上4种线程池的分类,其中只有newSingleThreadPool可以做到按线程的先后次序到达执行,遵循FIFO的队列模式。newSingleThreadPool是只有1个工作线程的线程池,后续进来的线程都会进入Queue等待队列中,当线程池线程空闲的时候先进如等待队列的线程会优先进入工作线程执行任务

查看Executors.newSingleThreadExecutor()源码内部发现其底层依旧是通过ThreadPoolExecutor按特定参数来构建的线程池,具体如下:new ThreadPoolExecutor(1, 1,0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>())。线程池最大线程数是1,等待队列是LinkedBlockingQueue无界阻塞队列,这就保证了线程先进先执行的次序

以上是关于线程池怎么保证线程按次序执行任务?的主要内容,如果未能解决你的问题,请参考以下文章

线程池判断是不是执行完毕

Java如何判断线程池所有任务是不是执行完毕

Java如何判断线程池所有任务是不是执行完毕

Java如何判断线程池所有任务是不是执行完毕

java创建线程池都有哪些

线程池newScheduledThreadPool使用