首页天道酬勤did not find a matching property,subprocess.calledprocesserror

did not find a matching property,subprocess.calledprocesserror

张世龙 05-05 20:43 72次浏览

ExecutorService提交和执行、运行和调用

ExecutorService是在Java线程池中定义的接口,它在java.util.concurrent包中定义了与执行后台任务相关的方法。

因为在ExecutorService接口上有两个Java API实现,所以这两个是Java线程池的具体实现类。

threadpoolexecutorscheduledthreadpoolexecutor 1、ExecutorService的创建是通过工具类java.util.concurrent.Executors的静态方法创建的

Executors包有Executor、ExecutorService、ScheduledExecutorService、ThreadFactory和Callable类工厂和实用方法。

例如,创建一个ExecutorService实例。 ExecutorService实际上是线程池的管理工具。

executorserviceexecutorservice=executors.newcachedthreadpool (; executorserviceexecutorservice=executors.newfixedthreadpool (3; executorserviceexecutorservice=executors.newsinglethreadexecutor (; 2、创建任务的任务是实现Runnable或Callable接口的类。

//Callable接口公共接口callable v { v call () throws Exception; }//Runnable接口publicinterfacerunnable { publicabstractvoidrun (; }不同点

Runnable没有返回值; Callable可以返回执行结果,是通用的,可以与Future、FutureTask联合得到异步执行的结果

Callable接口的呼叫(方法允许抛出异常; Runnable的run ) )方法的异常只能在内部消化,不能继续向上扔

Callalble接口支持返回必须调用FutureTask.get )的执行结果。 此方法阻止主进程的持续运行,必须调用才能阻止。

3、将任务添加到线程中,执行执行execute或submit调用,即可将任务添加到线程池中。

线程池为每个任务创建一个线程,并在随后的某个时间自动运行。

继承ExecutorService接口、Executor接口。

publicinterfaceexecutorserviceextendsexecutor { tfuturetsubmit,callablettask}; tfuturetsubmit (可运行任务,T result ); YouTube? 提交(运行任务); } publicinterfaceexecutor { void execute (可运行命令); }提交和执行之间的区别:

submit有返回值,execute没有

使用返回值的示例,例如,有很多task可以验证数据。 所有的task都将运行,每个task都会告诉我其运行结果。 如果失败了,原因是什么? 然后,合并所有失败的原因并返回。

提交对于处理Exception很有用

为了能在外面感知到task内部的exception,只能使用submit捕捉Future.get抛出的异常。

例如,有很多更新数据的task希望一个task失败后,其他task不需要运行。 这需要catch Future.get抛出的异常。 然后停止执行其他任务。

即使是相同的submit方法,参数Runnable和Callable也略有不同。

当Callable对象传递给ExecutorService的submit方法时,该call方法会自动在线程中执行,并返回执行结果的Future对象。 将Runnable对象传递给ExecutorService的submit方法时,该run方法会自动在线程中执行,并返回执行结果的Future对象,但会在该Future对象上调用get方法

实现callable,callablelambda