首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java并发编程:任务执行器Executor接口​

01

同步执行器

同步执行器是最简单的执行器,提交给它的任务将由调用线程直接执行,不需要其它线程的帮忙。如下演示代码中,DirectExecutor继承了Executor,它的execute方法直接调用了Runnable的run方法。我们在主线程中创建DirectExecutor对象后执行MyTask任务,实际上该任务将由调用线程(主线程)直接执行,最终输出executing task…。

02

一对一执行器

一对一执行器就是一个任务由一个线程负责,每个任务提交给执行器时都将创建一个新的线程来执行该任务。如下代码中,ThreadPerTaskExecutor的execute方法会新建一个线程执行任务。

03

线程执行器

线程池执行器就是拥有线程池功能的执行器,任务提交后将由线程池负责执行。我们将自己模拟实现一个简单的线程池,ThreadPoolExecutor类包含了任务队列taskQueue和十个工作线程workers,构造函数中会创建十个线程并通过while(true)循环不断从任务队列中取出任务并执行。而execute方法则是将任务添加到任务队列中,然后工作线程会执行任务队列中的任务。

04

串行执行器

串行执行器是一种具有串行功能的执行器,所有任务被加入到一个先进先出队列中,然后内部的另外一个执行器会按照队列的顺序执行任务。前一任务执行完后负责启动后一任务的执行,这样就形成了串行。我们看下简单的实现,SerialExecutor类中包含了一个任务队列和执行器,这里使用ThreadPerTaskExecutor执行器。SerialExecutor的execute方法负责将任务加入到队列中,而且还负责开启第一个任务的执行。finally块主要负责启动下一个任务,从而形成环环相扣。

05

总结

Executor只是一个接口,它提供了任务和执行的解耦机制。我们分析了几种常见执行器的实现,实际工程上可以根据自己实际情况来设计实现任务执行器。JDK也为我们提供若干有用的执行器,后面有机会我们将对其进行分析。

- END -

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201214A0IHFZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券