河南企业站seo,教你做网站的视频,网站热点关键词,wordpress hyperExecutorService功能是Java 5附带的。它扩展了Executor接口#xff0c;并提供了线程池功能来执行异步简短任务。 使用Java 6提供的ExecutorService接口有五种异步执行任务的方法。 ExecutorService execService Executors.newCachedThreadPool#xff08;#xff09;; 这… ExecutorService功能是Java 5附带的。它扩展了Executor接口并提供了线程池功能来执行异步简短任务。 使用Java 6提供的ExecutorService接口有五种异步执行任务的方法。 ExecutorService execService Executors.newCachedThreadPool; 这种方法的方法将创建一个线程池该线程池会根据需要创建新线程但是在可用之前会重用以前构造的线程。 这些池通常将提高执行许多短期异步任务的程序的性能。 如果没有可用的现有线程则将创建一个新线程并将其添加到池中。 60秒钟未使用的线程将终止并从缓存中删除。 ExecutorService execService Executors.newFixedThreadPool10; 这种方法的方法创建了一个线程池该线程池可重用固定数量的线程。 创建的nThreads将在运行时处于活动状态。 如果在所有线程都处于活动状态时提交了其他任务则它们将在队列中等待直到某个线程可用为止。 ExecutorService execService Executors.newSingleThreadExecutor; 这种方法的方法将创建一个执行器该执行器使用在无限制队列上运行的单个工作线程。 确保任务按顺序执行并且在任何给定时间都不会激活一项以上的任务。 ExecutorService的方法 executeRunnable在将来的某个时间执行给定命令。 SubmitRunnable Submit方法返回一个表示执行任务的Future对象。 如果任务正确完成则Future Object返回null。 shutdown启动有序关闭在该关闭中执行先前提交的任务但不接受任何新任务。 如果已关闭则调用不会产生任何其他影响。 shutdownNow尝试停止所有正在执行的任务暂停正在等待的任务的处理并返回正在等待执行的任务的列表。 除了尽最大努力尝试停止处理正在执行的任务之外没有任何保证。 例如典型的实现将通过Thread.interrupt取消因此任何无法响应中断的任务都可能永远不会终止。 下面是一个示例应用程序 步骤1建立已完成的专案 创建一个Maven项目如下所示。 可以使用Maven或IDE插件来创建它。 第2步创建新任务 通过实现如下所示的Runnable接口创建线程来创建新任务。 TestTask类指定将要执行的业务逻辑。 package com.otv.task;import org.apache.log4j.Logger;/*** author onlinetechvision.com* since 24 Sept 2011* version 1.0.0**/
public class TestTask implements Runnable {private static Logger log Logger.getLogger(TestTask.class);private String taskName;public TestTask(String taskName) {this.taskName taskName;}public void run() {try {log.debug(this.taskName is sleeping...);Thread.sleep(3000);log.debug(this.taskName is running...);} catch (InterruptedException e) {e.printStackTrace();}}public String getTaskName() {return taskName;}public void setTaskName(String taskName) {this.taskName taskName;}} 步骤3使用newCachedThreadPool创建TestExecutorService 通过使用方法newCachedThreadPool创建TestExecutorService。 在这种情况下将在运行时指定创建的线程数。 package com.otv;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import com.otv.task.TestTask;/*** author onlinetechvision.com* since 24 Sept 2011* version 1.0.0**/
public class TestExecutorService {public static void main(String[] args) {ExecutorService execService Executors.newCachedThreadPool();execService.execute(new TestTask(FirstTestTask));execService.execute(new TestTask(SecondTestTask));execService.execute(new TestTask(ThirdTestTask));execService.shutdown();}
} 运行TestExecutorService时输出将如下所示 24.09.2011 17:30:47 DEBUG (TestTask.java:21) - SecondTestTask is sleeping...
24.09.2011 17:30:47 DEBUG (TestTask.java:21) - ThirdTestTask is sleeping...
24.09.2011 17:30:47 DEBUG (TestTask.java:21) - FirstTestTask is sleeping...
24.09.2011 17:30:50 DEBUG (TestTask.java:23) - ThirdTestTask is running...
24.09.2011 17:30:50 DEBUG (TestTask.java:23) - FirstTestTask is running...
24.09.2011 17:30:50 DEBUG (TestTask.java:23) - SecondTestTask is running... 步骤4使用newFixedThreadPool创建TestExecutorService 通过使用方法newFixedThreadPool创建TestExecutorService。 在这种情况下将在运行时指定创建的线程数。 package com.otv;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import com.otv.task.TestTask;/*** author onlinetechvision.com* since 24 Sept 2011* version 1.0.0**/
public class TestExecutorService {public static void main(String[] args) {ExecutorService execService Executors.newFixedThreadPool(2);execService.execute(new TestTask(FirstTestTask));execService.execute(new TestTask(SecondTestTask));execService.execute(new TestTask(ThirdTestTask));execService.shutdown();}
} 运行TestExecutorService时在完成FirstTestTask和SecondTestTask的执行之后将执行ThirdTestTask。 输出将被视为 下面 24.09.2011 17:33:38 DEBUG (TestTask.java:21) - FirstTestTask is sleeping...
24.09.2011 17:33:38 DEBUG (TestTask.java:21) - SecondTestTask is sleeping...
24.09.2011 17:33:41 DEBUG (TestTask.java:23) - FirstTestTask is running...
24.09.2011 17:33:41 DEBUG (TestTask.java:23) - SecondTestTask is running...
24.09.2011 17:33:41 DEBUG (TestTask.java:21) - ThirdTestTask is sleeping...
24.09.2011 17:33:44 DEBUG (TestTask.java:23) - ThirdTestTask is running... 步骤5使用newSingleThreadExecutor创建TestExecutorService 通过使用方法newSingleThreadExecutor创建TestExecutorService。 在这种情况下仅创建一个线程并按顺序执行任务。 package com.otv;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import com.otv.task.TestTask;/*** author onlinetechvision.com* since 24 Sept 2011* version 1.0.0**/
public class TestExecutorService {public static void main(String[] args) {ExecutorService execService Executors.newSingleThreadExecutor();execService.execute(new TestTask(FirstTestTask));execService.execute(new TestTask(SecondTestTask));execService.execute(new TestTask(ThirdTestTask));execService.shutdown();}
} 当运行TestExecutorService时FirstTestTask的执行完成后将执行SecondTestTask和ThirdTestTask。 输出将如下所示 24.09.2011 17:38:21 DEBUG (TestTask.java:21) - FirstTestTask is sleeping...
24.09.2011 17:38:24 DEBUG (TestTask.java:23) - FirstTestTask is running...
24.09.2011 17:38:24 DEBUG (TestTask.java:21) - SecondTestTask is sleeping...
24.09.2011 17:38:27 DEBUG (TestTask.java:23) - SecondTestTask is running...
24.09.2011 17:38:27 DEBUG (TestTask.java:21) - ThirdTestTask is sleeping...
24.09.2011 17:38:30 DEBUG (TestTask.java:23) - ThirdTestTask is running... 步骤6参考资料 http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html http://tutorials.jenkov.com/java-util-concurrent/executorservice.html 参考 Online Technology Vision博客中来自我们JCG合作伙伴 Eren Avsarogullari的Java Executor服务类型 。 翻译自: https://www.javacodegeeks.com/2012/08/java-executor-service-types.html