我们知道为了实现对线程池的作用,executor对线程的管理采取了一定的措施,使用接口进行操作。所以我们会发现,其实executor框架是有许多不同的接口的,它们分别在不同的执行上发挥相应的作用。下面我们就executor框架组成、框架使用图和实例为大家进行展示。
1.executor框架组成
(1)工作任务:Runnable/Callable 接口
作任务就是Runnable/Callable接口的实现,可以被线程池执行
(2)执行机制:Executor接口、ExecutorService接口、ScheduledExecutorService接口
ThreadPoolExecutor 是最核心的线程池实现,用来执行被提交的任务
ScheduledThreadPoolExecutor 是任务调度的线程池实现,可以在给定的延迟后运行命令,或者定期执行命令(它比Timer更灵活)
ForkJoinPool是一个并发执行框架
(3)异步计算的结果:Future接口
实现Future接口的FutureTask类,代表异步计算的结果
2.Executor框架使用图
/*@paramcorePoolSize*/ /*@parammaximumPoolSize*/ /*@paramkeepAliveTime线程空闲时存活的有效时长*/ /*@paramunit时长单位*/ /*@paramunit时长单位*/ /*@paramworkQueue等待执行的队列*/ /*maximumPoolSize是在workQueue队列满了之后才额外创建的线程数量*/ ThreadPoolExecutortpe=newThreadPoolExecutor(5,10,100,TimeUnit.MILLISECONDS,newArrayBlockingQueue<Runnable>(10)); /*有返回值*/ Callable<String>callable=newCallable<String>(){ publicStringcall()throwsException{ try{ Thread.sleep(5000); Stringa="returnString"; returna; }catch(Exceptione){ e.printStackTrace(); return"exception"; } } }; Future<String>future=tpe.submit(callable); /*获取返回值,这是一个同步阻塞式获取的方法*/ future.get(); /*有返回值*/ FutureTask<String>futureTask=newFutureTask<String>(callable); futureTask.run(); /*无返回值*/ Runnablerunnable=newRunnable(){ publicvoidrun(){ try{ Thread.sleep(5000); Stringa="returnString"; }catch(Exceptione){ e.printStackTrace(); } } }; tpe.execute(runnable);
原文来自:https://www.py.cn
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容