Java多线程与并发05: 执行器

目录

使用Executor

ExecutorService

Future

ExecutorService使用方法

Executors

使用ExecutorService提交任务


使用Executor

使用executor可以实现类似与Thread的方法开辟线程,避免手动操作线程的创建:

使用execute方法执行一个Runnable接口的实现。但是存在很多限制:

1. 无法获取返回值(使用的是Runnable接口)

2. 无法知道线程执行的进度,无法取消任务。(不会返回Future对象)

3. 无法执行批量的任务。(就是一个单纯的执行)

4. 无法终止线程。(没有Future对象,没法操作指定线程)

ExecutorService

Executor的问题,ExecutorService帮忙解决了:

boolean awaitTermination(long timeout, TimeUnit unit)

等待线程完成,当调用shutdown或超时时间到了或被意外中断了线程,线程退出返回true,超时返回false

<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)

执行所有的任务,并返回一个List<Future<T>>的集合

<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)

带有超时时间的执行所有的任务,并返回一个List<Future<T>>的集合,超时后,未执行完成的任务将被取消。

<T> T invokeAny(Collection<? extends Callable<T>> tasks)

执行所有的任务,并返回一个执行成功的结果。未完成的将被取消。

<T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)

带有超时时间的执行所有的任务,并返回一个执行成功的结果。未完成的将被取消。

boolean isShutdown()

判断是否被停止。

boolean isTerminated()

调用shutdown或shutdownNow后是否执行完成。

void shutdown()

终止任务的执行,不再接受新的任务。

List<Runnable> shutdownNow()

尽最大努力停止当前执行的任务,并中断等待的任务。

<T> Future<T> submit(Callable<T> task)

提交一个异步任务,返回一个对应的Future对象。

Future<?> submit(Runnable task)

提交一个异步任务,返回一个对应的Future对象。

<T> Future<T> submit(Runnable task, T result)

提交一个异步任务,返回一个对应的Future对象。成功执行,该对象的get方法返回值为result

Future

表示一个Task的未来控制对象,维护任务状态,获取任务的结果,判断任务是否完成等等。

boolean cancel(boolean mayInterruptIfRunning)

取消任务,参数表示是否中断线程。

V get()

阻塞并等待任务执行的返回值

V get(long timeout, TimeUnit unit)

带有超时的阻塞并等待任务执行的返回值

boolean isCancelled()

是否被取消

boolean isDone()

是否结束(正常结束,异常,被取消)

ExecutorService使用方法

使用executorService实例的submit提交任务,使用任务的get方法阻塞获取结果。

Executors

此类提供的静态方法可以提供ExecutorService的实现:

newCachedThreadPool()

可以创建无限个线程。

newSingleThreadExecutor()

只有一个线程,无限长等待队列

newFixedThreadPool(int nThreads)

固定个数的线程池,无限长等待队列。

newSingleThreadScheduledExecutor()

只有一个线程,执行定时任务或循环周期任务

newScheduledThreadPool(int corePoolSize)

定时任务或循环周期执行的任务。
 

使用示例:

使用ExecutorService提交任务

这里使用newFixedThreadPool创建了一个线程池,创建了一个Callable实现。

这里使用executorService的submit方法提交了一个任务,返回一个Future对象。

使用isDone判断线程是否完成(正常完成、异常或取消)

使用get获取执行结果

使用shutdownNow停止线程池。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值