• 线程池


    1、线程池是什么?

    线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。

    java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池

    多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。

    2. 常见线程池?

    ①newSingleThreadExecutor
    单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务
    ②newFixedThreadExecutor(n)
    固定数量的线程池,没提交一个任务就是一个线程,直到达到线程池的最大数量,然后后面进入等待队列直到前面的任务完成才继续执行
    ③newCacheThreadExecutor(推荐使用)
    可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般是60秒无执行)的线程,当有任务来时,又智能的添加新线程来执行。
    ④newScheduleThreadExecutor
    大小无限制的线程池,支持定时和周期性的执行线程

    3.  ExecutorService 常用方法

    public interface Executor {
        void execute(Runnable command);
    }
     
    public interface ExecutorService extends Executor {
        void shutdown(); // 已经提交的任务继续执行,不接受新的任务提交
     
        List<Runnable> shutdownNow(); // 尝试终止正在执行的任务、取消正在等待执行的任务并返回它们
     
        boolean isShutdown();
     
        boolean isTerminated(); // 只有调用了shutdown方法,并且没有任务在执行了,返回true
     
        // 等待所有任务执行完毕,也需要调用古shutdown方法,否则只能等待超时
        boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException;
     
        <T> Future<T> submit(Callable<T> task);
     
        <T> Future<T> submit(Runnable task, T result); // result就是Future的get方法的返回值
     
        Future<?> submit(Runnable task);
     
        // 所有任务执行完毕,按序返回Future对象
        <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
            throws InterruptedException;
     
        // 所有任务执行完毕或超时,按序返回Future对象,超时任务返回的Future的isCancelled返回tue
        <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
                                      long timeout, TimeUnit unit)
            throws InterruptedException;
     
        // 返回第一个执行完毕的任务的Future对象,其余未执行完毕任务被取消
        <T> T invokeAny(Collection<? extends Callable<T>> tasks)
            throws InterruptedException, ExecutionException;
     
        // 返回第一个执行完毕的任务的Future对象,其余未执行完毕任务被取消
        // 超时后没有任务完成则返回null
        <T> T invokeAny(Collection<? extends Callable<T>> tasks,
                        long timeout, TimeUnit unit)
            throws InterruptedException, ExecutionException, TimeoutException;
    }

     参考:

    https://825635381.iteye.com/blog/2184680

  • 相关阅读:
    课程个人总结
    构建之法阅读笔记06
    构建之法读后感5
    第五周进度条
    提高自身能力
    活动图与状态机图
    对分析业务模型----类图的学习与认识
    需求分析工作的基本道理
    问题账户需求分析
    2016秋季个人阅读计划
  • 原文地址:https://www.cnblogs.com/lovedaodao/p/10138570.html
Copyright © 2020-2023  润新知