zoukankan      html  css  js  c++  java
  • 线程池

    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

  • 相关阅读:
    第二十九课 循环链表的实现
    第二十八课 再论智能指针(下)
    第二十七课 再论智能指针(上)
    第二十六课 典型问题分析(Bugfix)
    普通new和placement new的重载
    leetcode 581. Shortest Unsorted Continuous Subarray
    leetcode 605. Can Place Flowers
    leetcode 219. Contains Duplicate II
    leetcode 283. Move Zeroes
    leetcode 217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/lovedaodao/p/10138570.html
Copyright © 2011-2022 走看看