java 线程池详解

一.介绍:java 里面线程池的顶级接口是 Executor,但是严格意义上讲 Executor 并不是一个线程池,而 只是一个执行线程的工具。真正的线程池接口是ExecutorService。 线程池:虽然线程的创建销毁的开销相对较小,但是频繁得创建和销毁也会消耗有限的资源,从而带来性能上的浪费,也不够高效。因此线程池的出,现就是为了解决这一问题,即在初始状态创建并维护一定数量的空闲线程...
摘要由CSDN通过智能技术生成

一.介绍:

  • java 里面线程池的顶级接口是 Executor,但是严格意义上讲 Executor 并不是一个线程池,而 只是一个执行线程的工具。真正的线程池接口是ExecutorService。 
  • 线程池:虽然线程的创建销毁的开销相对较小,但是频繁得创建和销毁也会消耗有限的资源,从而带来性能上的浪费,也不够高效。因此线程池的出,现就是为了解决这一问题,即在初始状态创建并维护一定数量的空闲线程,当有需要执行的任务,就交付给线程中的一个线程,任务执行结束后,该线程也不会死亡,而是回到线程池中重新变为空闲状态。
  • 线程池的好处:减少线程频繁创建销毁的资源开销,同时能够有效控制系统中并发线程的数量,防止系统性能的剧烈下降。

 

二.常用线程池

  1. newCachedThreadPool():创建一个具有缓存功能的线程池,系统根据需要创建线程
  2. newFixedThreadPool(int nThreads):创建一个可重用的,具有固定线程数的线程池
  3. newSingleThreadExecutor():创建一个单线程线程池
  4. newScheduledThreadPool(int corePoolSize):创建具有指定线程数的线程池,它将在指定延迟后执行线程任务
  5. newSingleThreadScheduledExecutor():创建一个延迟执行的单线程线程池
  6. newWorkingStealingPool(int parallelism):创建持有足够的线程的线程池来支持给定的并行级别,以充分支持多CPU并行能力。
  7. newWorkingStealingPool():根据CPU个数设置并行级别。

 

三.源码分析

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

    /*
      * 不再接受新任务
      * 当所有已提交任务执行完后,就关闭
      * 如果已经关闭,则调用没有其他作用
    */
    void shutdown();
    
    /* 
      * 试图停止所有正在执行的活动任务,暂停处理正在等待的任务
      * 并返回等待执行的任务列表
    */
    List<Runnable> shutdownNow();

    boolean isShutdown();

    boolean isTerminated();

    //所有任务完成后shutdown,或者超时interrupted后会shutdown
    boolean awaitTermination(long timeout, TimeUnit unit)
        throws InterruptedException;

    // 提交任务
    <T> Future<T> submit(Callable<T> task);

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

    Future<?> submit(Runnable task);

    // 批量提交任务
    <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
        throws InterruptedException;

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

    <T> T invokeAny(Collection<? extends Callable<T>> tasks)
        throws InterruptedException, ExecutionException;


    <T> T invokeAny(Collection<? extends Callable<T>> tasks,
                    long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

3.1.线程池参数

Executor

   ExecutorService

       AbstractExecutorService

           ThreadPoolExecutor

线程池通过Executors类创建出不同线程池,默认四种线程池创建方法都是默认给开发者配置好了相应参数,通过不同参数使用构造方法最终构造出我们看到的不同线程池。

public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }


public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值