java中executorservice_Java中的ExecutorService是什么以及如何创建它?

成为一种经过认证的专业Java编程语言,它可以非常高效地与多线程应用程序一起工作,这些应用程序要求任务在线程中同时执行。任何应用程序都很难同时执行大量线程。为了解决这个问题,Java附带了Execut

成为一种经过认证的专业

Java编程语言,它可以非常高效地与多线程应用程序一起工作,这些应用程序要求任务在线程中同时执行。任何应用程序都很难同时执行大量线程。为了解决这个问题,Java附带了ExecutorService,它是Executors框架的一个子接口。在本文中,我们将讨论Java中ExecutorService的功能。以下是本博客中涉及的主题:

什么是Executor框架?ExecutorService在Java示例中Java ExecutorService实现ThreadPoolExecutor ScheduledThreadPoolExecutor ExecutorService Usage Runnable vs Callable ExecutorService Shutdown什么是Executor Framework?”

“同时创建和执行一个或两个线程相当容易。但是当线程数增加到一个重要的数目时,这就变得很困难了。大型多线程应用程序将有数百个线程同时运行。因此,将应用程序中的线程创建与线程管理分离是完全有意义的。

执行器是一个框架,可帮助您在应用程序中创建和管理线程。executor框架帮助您完成以下任务。

线程创建:它提供了多种创建线程的方法,有助于同时运行应用程序。

线程管理:它还管理线程生命周期。在提交任务以供执行之前,您不必担心线程是否处于活动、忙碌或死机状态。

任务提交和执行:Executor框架提供了在线程池中提交任务的方法,它还提供了决定线程是否执行的权力。

e1dd8c61c1f8482c8851a5a7e68074ac.pngExecutorService在Java示例

中是executor框架的子接口,它添加了一些功能来管理应用程序的线程生命周期。它还提供了一个submit()方法,可以接受可运行对象和可调用对象。

在下面的示例中,我们将创建一个带有单个线程的ExecutorService,然后提交要在线程内执行的任务。

进口并发java.util.concurrent遗嘱执行人;公共类示例{公共静态void main(字符串[]参数){系统输出打印(“创建ExecutorService”);ExecutorService执行服务=Executors.newSingleThreadExecutor执行器();Runnable Runnable=()->{};系统输出打印(“将runnable指定的任务提交给executorservice”);}输出:内部:主创建ExecutorService将runnable指定的任务提交给executorserviceinside:pool-1-thread-1

上面的程序演示了如何在executor中创建ExecutorService和执行任务。如果一个任务被提交执行,而线程当前正忙于执行另一个任务,则该任务将在队列中等待,直到线程有空执行它。

当您运行上述程序时,该程序将永远不会退出。您需要显式地关闭它,因为executor服务一直在监听新任务。

Java executor service实现

ExecutorService与线程池非常相似。实际上,ExecutorService在并发java.util.concurrent包是一个线程池实现。ExecutorService在并发java.util.concurrent包:

ThreadPoolExecutor

ThreadPoolExecutor使用其内部池线程之一执行给定任务。

f2844e7a90d403a48114d55bcd38ff2b.png

创建ThreadPoolExecutor

int corePoolSize=5;int最大池大小=10;ExecutorService线程池执行器=新的threadPoolExecutor(corePoolSize、maxPoolSize、keepAliveTime,时间单位毫秒,新的LinkedBlockingQueue);ScheduledExecutorService ScheduledExecutorService=Executors.newScheduledThreadPool执行器(5) (二);ScheduledFuture ScheduledFuture=计划duledExecutorService.schedule(新的可调用(){公共对象调用()引发异常{return“调用”;},5岁,ExecutorService用法

有几种不同的方法将任务委托给ExecutorService。

execute(Runnable)

submit(Runnable)

invokeAny()

invokeAll()

execute Runnable

Java ExecutorService execute(Runnable)接受java.lang.Runnable语言对象并执行它异步

执行服务.execute(新的Runnable(){系统输出打印(“异步任务”);}});

无法获取execute Runnable的结果,因为您必须使用可调用的。

Submit Runnable

Java ExecutorService Submit(Runnable)方法接受可运行的实现并返回未来的对象。future对象可用于检查Runnable是否已完成执行。

未来=执行服务提交(新的Runnable(){公共无效运行(){}未来。得到();//如果任务正确完成,则返回null。Submit Callable

Java ExecutorService Submit(Callable)方法类似于Submit(Runnable),但它采用Java Callable而不是Runnable。

未来=执行服务提交(新的可调用(){公共对象调用()引发异常{返回“可调用结果”;});系统输出打印("未来。得到() = " 未来。得到());未来。得到=可调用结果invokeAny()

invokeAny()方法接受一个可调用对象的集合。调用此方法不返回任何未来,但返回其中一个可调用对象的结果。

Set>callables=new HashSet>();可调用项.add(新的可调用(){返回“任务A”;});public String call()引发异常{返回“任务B”;});public String call()引发异常{}字符串结果=执行服务.invokeAny(可赎回);系统输出打印(“result=” 结果);executorService.shutdown();ExecutorService执行服务=Executors.newSingleThreadExecutor执行器();可调用项.add(新的可调用(){返回“任务A”;});public String call()引发异常{}});可调用项.add(新的可调用(){返回“任务C”;});列表>futures=执行器服务.invokeAll(可赎回);系统输出打印(" 未来。得到= " 未来。得到());}executorService.shutdown();Runnable vs Callable

Runnable和Callable接口彼此非常相似。这种差异在接口声明中是可见的。两个接口都表示一个可以由线程或ExecutorService并发执行的任务。

可调用声明:

public object call()抛出异常;

可运行声明:

公共无效运行();}

两者的主要区别在于call()方法可以从方法调用返回对象。并且call()方法可以引发异常,而run()方法不能。

取消任务

您可以取消提交给ExecutorService的任务,方法是在以后提交任务时调用cancel方法。

ExecutorService关闭

为了使线程即使在执行完成后也不运行,您应该关闭ExecutorService。

shut down()

以终止ExecutorService中的线程,您可以调用Shutdown()方法。

executorService.shutdown();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值