excel year函数怎么算工龄(excel怎么筛选重复的内容)
617
2022-05-30
在上一篇文章《如何保证线程按照指定次序执行-Thread.join》中,介绍了如何通过Thread.join()函数实现多个线程按照指定次序执行,今天我们来看另一种方式,通过线程池的方式来实现。
首先来看基础的例子:
public class ThreadPoolTest { public static void main(String[] args) { Thread A = new Thread(() -> System.out.println("A")); Thread B = new Thread(() -> System.out.println("B")); Thread C = new Thread(() -> System.out.println("C")); A.start(); B.start(); C.start(); } }
上述代码无法保证程序的执行顺序,我们引入线程池。使用newSingleThreadExecutor方法。
newSingleThreadExecutor的官方释义如下:
public static ExecutorService newSingleThreadExecutor()
创建一个使用从无界队列运行的单个工作线程的执行程序。 (请注意,如果这个单个线程由于在关闭之前的执行过程中发生故障而终止,则如果需要执行后续任务,则新的线程将占用它。)任务保证顺序执行,并且不超过一个任务将被激活在任何给定的时间。 与其他等效的newFixedThreadPool(1) 、newFixedThreadPool(1) ,返回的执行器保证不被重新配置以使用额外的线程。
我们来看看实际编程运行的效果。
实现代码:
public class ThreadPoolTest { public static void main(String[] args) throws InterruptedException { Thread A = new Thread(() -> System.out.println("A")); Thread B = new Thread(() -> System.out.println("B")); Thread C = new Thread(() -> System.out.println("C")); ExecutorService pool = Executors.newSingleThreadExecutor(); pool.submit(A); pool.submit(B); pool.submit(C); pool.shutdown(); } }
运行结果:
根据文档,我们可以知道,还可以用newFixedThreadPool(1) 或者newFixedThreadPool(1) ,结果是一样的。
另外,线程池我们最常用的一个函数是execute(Runnable command),在本例测试用,发现使用execute时,也能达到同样的效果,那么submit与execute有什么区别呢?
execute是接口Executor的方法,其含义为:
void execute(Runnable command)
在将来的某个时间执行给定的命令。 该命令可以在一个新线程,一个合并的线程中或在调用线程中执行,由Executor实现。
而submit是接口ExecutorService的方法,其含义为:
Future> submit(Runnable task)
提交一个可运行的任务执行,并返回一个表示该任务的未来。 未来的get方法将返回null 成功完成时。
通过newSingleThreadExecutor的队列模式,从而保证了任务按照提交的顺序来执行。
任务调度
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。