更好搭配:Java 与线程类。第五部分 — 执行器、线程池、分支/连接 简介所以,我们知道 Java 有线程。你可以在题为《Better together: Java and the Thread class. Part I——执行线程》的评测中阅读相关内容。让我们再看看典型的代码:如你所见,启动任务的代码相当典型,但我们必须在新任务中重复它。一种解决方案是将其放入单独的方法中,例如。但Java的开发者考虑了我们的困境,设计了界面:这段代码显然更简洁:现在我们只需编写代码来启动线程。那很好,不是吗?但这仅仅是个开始:public static void main(String[] args) throws Exception { Runnable task = () - { System.out.println("Task executed"); }; Thread thread = new Thread(task); thread.start(); }execute(Runnable runnable)Executorpublic static void main(String[] args) throws Exception { Runnable task = () - System.out.println("Task executed"); Executor executor = (runnable) - { new Thread(runnable).start(); }; executor.execute(task); }Runnablehttps://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executor.html如你所见,界面有一个子接口。该接口的 Javadoc 表示,an 描述了一个提供关闭 该 的方法的具体 。它还使得能够获取 以跟踪执行过程。之前,在《Better together: Java and the Thread class. IV — Callable, Future and friends》中,我们简要回顾了 的功能。如果你忘了或者从未读过,我建议你重新回忆;) Javadoc还说了什么?它告诉我们有一个特殊的工厂,可以创建默认的实现。ExecutorExecutorServiceExecutorServiceExecutorExecutorjava.util.concurrent.FutureFuturejava.util.concurrent.ExecutorsExecutorService执行人服务让我们回顾一下。我们必须在线程上执行(即调用)某个任务,而创建线程的代码对我们隐藏。我们有——一个具体方案,有多种控制进展的选项。我们有工厂可以创建 。现在我们自己来做:你可以看到我们指定了一个大小为2的固定线程池。然后我们一个个提交任务到池子里。每个任务返回包含线程名称()的 。关键是要在最后阶段关闭,否则我们的项目就不会结束。 工厂还有其他工厂生产方法。例如,我们可以创建一个仅包含一个线程()的池,或者包含缓存()的池,线程空闲1分钟后被移除。 实际上,这些任务由一个分组队列支持,任务被放