Java newsinglethreexecutor示例
时间:2020-02-23 14:35:05 来源:igfitidea点击:
在本教程中,我们将了解executor的NewsingLethreadexecutor工厂方法。
在最后一个教程中,我已经分享了ThreadPoolExecutor的介绍。
如果我们不了解ThreadPoolExecutor的概念,则应首先通过它。
Executor的News.comhethreadexecutor工厂方法:
此方法返回一次执行一个任务的线程池执行器。
如果我们已将N任务提交给执行器,则它将逐个执行它。
如果此线程被中断,则将创建一个新线程以执行任务。
语法:
ExecutorService executorService=Executors.newSingleThreadExecutor();
Java newsinglethreexecutor示例:
让我们创建一个非常简单的例子。
步骤1:创建名为"looptask.java"的可追踪任务。
package org.igi.theitroad; public class LoopTask implements Runnable { private String loopTaskName; public LoopTask(String loopTaskName) { super(); this.loopTaskName = loopTaskName; } @Override public void run() { System.out.println("Starting "+loopTaskName); for (int i = 1; i <= 10; i++) { System.out.println("Executing "+loopTaskName+" with "+Thread.currentThread().getName()+"===="+i); } System.out.println("Ending "+loopTaskName); } }
第2步:创建一个名为"singlethreadpoolmain"的类。
这将是我们的主类。
package org.igi.theitroad; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SingleThreadPoolMain { public static void main(String args[]) { ExecutorService es=Executors.newSingleThreadExecutor(); for (int i = 1; i <= 3; i++) { LoopTask loopTask=new LoopTask("LoopTask "+i); es.submit(loopTask); } es.shutdown(); } }
我们使用了新的NewsingLethreadExecutor,因此当我们提交了3个任务时,将创建1个新线程,并将在时间执行1个任务。
其他2个任务将在等待队列中等待。
一旦通过线程完成一个任务,将通过此线程挑选另一个任务,并将执行它。
NewsingLethreadexecutor和NewFixedThreadPool之间的区别:
如果我们可能会注意到,NewsingLethreadexecutor和NewFixedThreadPool之间存在相当相似之处。
我们无法更改JeverningLethReadeCutor返回的executors的线程池大小,但我们可以通过调用Class ThreadPoolExecutor的SetCorePoolsize()来更改NewFixedThreadPool(1)返回的executors的线程池大小。