【Java】线程池(二)ExecutorService

先看其父接口Executor。

public interface Executor {

    /**
     * Executes the given command at some time in the future.  The command
     * may execute in a new thread, in a pooled thread, or in the calling
     * thread, at the discretion of the {@code Executor} implementation.
     *
     * @param command the runnable task
     * @throws RejectedExecutionException if this task cannot be
     * accepted for execution
     * @throws NullPointerException if command is null
     */
    void execute(Runnable command);
}

该接口只有一个方法,接收一个Runnable实例,在线程池里执行该Runnable。

这个接口的作用是:将任务的提交与执行解耦。使用者只需要往一个Executor实例里扔任务即可,具体的执行细节已经被隐藏。

接着看下ExecutorService接口:
该接口继承了Executor接口,另外做了扩展,主要是提供了对线程池资源的管理能力。这包括两个方法:shutdown以及shutdownnow两个方法。

其中shutdown方法仅仅让线程池停止接收新的任务,新的任务被拒绝策略处理,默认是抛出异常。

而shutdownnow方法还会停止当前正在处理的任务,清空任务队列。但是并不能够保证停止当前任务的执行,从实现上来说,仅仅是调用线程的intercept方法,如果任务没有响应中断信号,那么就无法停止了。另外,该方法会返回队列里的任务。

最后还有一个方法awaitTermination,该方法是阻塞的,作用是在调用了shutdown方法后,等待当前任务执行完成直到超时。

后面介绍下实现。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值