Scala并发编程实战:Executor线程池

本文详细介绍了Scala中的Executor线程池,包括Executor、ExecutorService、ThreadPoolExecutor等核心概念,分析了线程池参数如corePoolSize、maximumPoolSize等的含义,并讨论了ExecutorService的创建和使用,特别提到了Scala的ExecutionContext与Future的简明用法。
摘要由CSDN通过智能技术生成

创建线程是一个重量级操作,因为需要调用操作系统内核的API,所以最好不要频繁的创建和销毁线程,为了能够复用创建的线程,常用的办法的就是创建线程池。

Executor

java.util.concurren包中提供了若干接口和类来实现线程池,最常用的有Executor,ExecutorService,ThreadPoolExecutor。

Executor接口很简单定义如下:

public interface Executor {
    void execute(Runnable command);
}

这个接口的目的在于将任务与执行机制解耦,使得用户不需要手动创建线程,只要交给Executor就行了。

ExecutorService

ExecutorService接口则扩展了Executor接口,增加了若干实用的方法,最常用的两个方法:

//关闭线程池
void shutdown();
//提交Callable任务以获取返回值
<T> Future<T> submit(Callable<T> task);

AbstractExecutorService抽象类是ExecutorService的实现,实现了若干模板方法。

最重要的类莫过于ThreadPoolExecutor,它是最最常用的ExecutorService实现类,下面重点说说。

ThreadPoolExecutor

ThreadPoolExecutor在构造时可以指定的参数最多有7个,另外还有3个使用一些默认参数的简化版本。

    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)
  • corePoolSize 是保留的核心线程数,即使线程处于空闲也不会被回收,除非设置了allowCoreThreadTimeOut属性。
  • maximumPoolSize 最大线程数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值