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

    首先来跑一个最简单的线程池例子:

    public static void main(String[] args) throws InterruptedException, ExecutionException {
    		
    		ExecutorService executorService = Executors.newFixedThreadPool(10);
    		executorService.submit( ()-> {System.out.println("1");});
    		
    	
    	}
    

     上面是一个最简单的固定线程池的例子。起了容量为10 的线程池;

      

    看 上面你的图 Java 提供的 线程池的方法。

    newFixedThreadPool 得到的是一个固定的线程池,可以定指定 线程工厂 指定线程的创建过程;

    newFixedThreadPool 返回的是一个  ThreadPoolExecutor 对象,这个对象的 AbstractExecutorService 的 子类 ,AbstractExecutorService  是  ExecutorService 的 抽象类。

    所以继承关系  ThreadPoolExecutor -->AbstractExecutorService  -->ExecutorService ->Executor

     

    ThreadPoolExecutor 这个类和很关键 里面有大量的关系线程池的属性

     corePoolSize 核心线程数,maximumPoolSize 最大的线程数,keepAliveTime 线程活多久 会被销毁,unit  时间 单位,

    workQueue 工作队列需要 特殊说明一下,这个是线程池队列的工作方式,链表,数组,延时队列或者优先级队列什么的。

    这个篇文章介绍的还比较详细:https://www.cnblogs.com/KingIceMou/p/8075343.html

    RejectedExecutionHandler handler 顾名之意 在线程池拒绝加入新任务的时候应该怎么办,默认的直接排除拒绝异常

    Executors.newCachedThreadPool()  得到一个 初始 大小0 ,最大 Integer.MAX_VALUE 的 一个线程池,需要注意的这个对象,只要请求线程的时候没有可用线程,就会自动扩容。相当于无限线程池。但是他会回收 10 秒没有任务的线程。

    Executors.newFixedThreadPool(nThreads)  固定大小的线程池。不会回收空闲线程 

    Executors.newScheduledThreadPool(corePoolSize)  这是一个可以定时的线程池。可以定时执行 线程对象,下面的图可以看待产生的对象都不一样了。请求实现了定时借口  ,

     实现了 ScheduledExecutorService 接口 , schedule 定时方法,也就是 说这个线程会在 延时 一定时间后执行。

     Executors.newSingleThreadExecutor()  一个单线程的线程池。

    Executors.newSingleThreadScheduledExecutor() 可以定时的 单线程 线程池。

    Executors.newWorkStealingPool() 这个是jdk 7 新添加的 根据cpu 的数量来创建的线程池。

    ExecutorService 可以加入一个 执行 一个线程 

     参数可以 Runnable 也可以是 Callable<T> task  ,区别是有没有返回。 返回值  Future 对象  get 方法是阻塞 的,需要等待线程返回才能得到。

    线程池 需要手动调用 e.shutdown(); 或者 e.shutdownNow() 销毁。区别在于e.shutdown();   会执行完未执行 完成的任务。 e.shutdownNow() 会让正在执行的线程抛出 打断 interrupt  异常。然后终止。

    掉了shutdown之类的方法线程池的状态就变 e.isShutdown() 为 true,但是这时 的  isTerminated() 可能还是  false  需要等 所有线程都子线程都终止了才是  isTerminated() 才是true。

    能耍的时候就一定要耍,不能耍的时候一定要学。
  • 相关阅读:
    gdb调试core文件
    设计模式之工厂模式
    设计模式之简单工厂模式
    正确理解python的装饰器
    深入理解MVC架构
    django的模板系统过滤器笔记
    python net-snmp 的使用
    用django写个CMS系统
    django的CMS系统(内容管理系统)
    RESTful 的通俗解释
  • 原文地址:https://www.cnblogs.com/cxygg/p/9284358.html
Copyright © 2011-2022 走看看