欢迎来到天天文库
浏览记录
ID:6072729
大小:75.00 KB
页数:8页
时间:2018-01-02
《executorservice用法详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ExecutorService用法详解接口java.util.concurrent.ExecutorService表述了异步执行的机制,并且可以让任务在后台执行。壹個ExecutorService实例因此特别像壹個线程池。事实上,在java.util.concurrent包中的ExecutorService的实现就是壹個线程池的实现。ExecutorService样例这里有壹個简单的使用Java实现的ExectorService样例:ExecutorServiceexecutorService=Executors.newFixedThreadPool(
2、10);executorService.execute(newRunnable(){publicvoidrun(){System.out.println("Asynchronoustask");}});executorService.shutdown();首先使用newFixedThreadPool()工厂方法创建壹個ExecutorService,上述代码创建了壹個可以容纳10個线程任务的线程池。其次,向execute()方法中传递壹個异步的Runnable接口的实现,这样做会让ExecutorService中的某個线程执行这個Runnable线程。
3、任务的委托(TaskDelegation)下方展示了一个线程的把任务委托异步执行的ExecutorService的示意图。壹旦线程把任务委托给ExecutorService,该线程就会继续执行与运行任务无关的其它任务。ExecutorService的实现由于ExecutorService只是壹個接口,你壹量需要使用它,那麽就需要提供壹個该接口的实现。ExecutorService接口在java.util.concurrent包中有如下实现类:ThreadPoolExecutorScheduledThreadPoolExecutor创建壹個Executo
4、rService你可以根据自己的需要来创建壹個ExecutorService,也可以使用Executors工厂方法来创建壹個ExecutorService实例。这里有几個创建ExecutorService的例子:ExecutorServiceexecutorService1=Executors.newSingleThreadExecutor();ExecutorServiceexecutorService2=Executors.newFixedThreadPool(10);ExecutorServiceexecutorService3=Executor
5、s.newScheduledThreadPool(10);ExecutorService使用方法这里有几种不同的方式让你将任务委托给壹個ExecutorService:execute(Runnable)submit(Runnable)submit(Callable)invokeAny(...)invokeAll(...)我会在接下来的内容里把每個方法都看壹遍。execute(Runnable)方法execute(Runnable)接收壹個java.lang.Runnable对象作为参数,并且以异步的方式执行它。如下是壹個使用ExecutorServic
6、e执行Runnable的例子:ExecutorServiceexecutorService=Executors.newSingleThreadExecutor();executorService.execute(newRunnable(){publicvoidrun(){System.out.println("Asynchronoustask");}});executorService.shutdown();使用这种方式没有办法获取执行Runnable之后的结果,如果你希望获取运行之后的返回值,就必须使用接收Callable参数的execute()方法
7、,后者将会在下文中提到。submit(Runnable)方法submit(Runnable)同样接收壹個Runnable的实现作为参数,但是会返回壹個Future对象。这個Future对象可以用于判断Runnable是否结束执行。如下是壹個ExecutorService的submit()方法的例子:Futurefuture=executorService.submit(newRunnable(){publicvoidrun(){System.out.println("Asynchronoustask");}});//如果任务结束执行则返回nullSys
8、tem.out.println("future.get()="+future.get());s
此文档下载收益归作者所有