zoukankan      html  css  js  c++  java
  • Executor简析

    本文只做简要解析,实际情形下我们多用spring的taskExecutor

    直接使用new Thread()创建线程的缺点:

    1、new Thread()耗费性能 

    2、调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪。 

    3、不利于扩展,比如如定时执行、定期执行、线程中断

    使用线程池的优点:

    1、可重用存在的线程,减少对象创建、消亡的开销,性能佳 

    2、可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞 

    3、提供定时执行、定期执行、单线程、并发数控制等功能

    ----------------------------------------------------------------------------------------------

    Exector继承树

    解析:

    Executor接口(执行器)

    位于java.util.cocurrent 包下,内部包含线程池的实现,Java 5后引入,用于启动、调度、管理线程(利用内部的线程池)。

    备注:通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免this逃逸问题

    注意:Executor!= 线程池,Executor>线程池

    ExecutorService接口

    继承自Executor 接口 

    Executors类

    通过工厂方法来创建不同的线程池,如:newFixedThreadPool、newCachedThreadPool、newSingleThreadExecutor、newScheduledThreadPool。

    1.public static ExecutorService newFixedThreadPool(int nThreads) 

    创建固定数目线程的线程池,当线程池满,多出的任务得在队列等待。

    2.public static ExecutorService newCachedThreadPool() 

    线程数目不固定,使用完后不立即关闭,而是在缓存中存放60s。当我们调用execute时如果缓存中有线程,将重用,否则新建一个。

    3.public static ExecutorService newSingleThreadExecutor() 

    创建一个单线程化的Executor。

    4.public static ScheduledExecutorService newScheduledThreadPoolExecutor(int corePoolSize) 

    创建一个支持定时及周期性的任务执行的线程池,多数情况下可用来替代Timer类。

  • 相关阅读:
    使用 git 托管代码
    转载自网络大神
    i18n 国际化
    转自知乎大神---什么是 JS 原型链?
    转自知乎大神----JS 闭包是什么
    转自知乎大神----JS 的 new 到底是干什么的?
    转载自知乎大神---this 的值到底是什么?一次说清楚
    sql查看本机IP地址
    Python 编码规范(Google)
    Python在mysql中进行操作是十分容易和简洁的
  • 原文地址:https://www.cnblogs.com/yanze/p/10688148.html
Copyright © 2011-2022 走看看