java 四种线程池

路边的煎饼小贩一般都是先做好几个煎饼还放着,有人买则直接交货而不是现做,现做浪费客人的时间,如果没有现成的只有现做煎饼,当然会牺牲客人的时间!!
这就是线程池

Java通过Executors提供四种线程池,分别为:

  • newCachedThreadPool创建一个可缓存线程池,最大长度是Interger. MAX_VALUE,如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程
  • newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。但在线程池空闲时,即线程池中没有可运行任务时,它不会释放工作线程,还会占用一定的系统资源
  • newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。可以当做Timer定时器
  • newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,如果这个线程异常结束,会有另一个取代它,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

  1. newCachedThreadPool如果线程池里有空闲的线程则调用,没有则新建。因为这个线程池不限制大小,所以要小心使用(不推荐使用)
    java 四种线程池_第1张图片
    使用线程池
  2. newFixedThreadPool存放的线程有大小限制,超出的线程会在队列中等待,不会无限制存放线程,使用和上图一样。
  3. newScheduledThreadPool 定长线程池,可以当做时定时器哦
    java 四种线程池_第2张图片
    GIF.gif

    java 四种线程池_第3张图片
    Paste_Image.png
  4. newSingleThreadExecutor 单线程化的线程池
    java 四种线程池_第4张图片
    GIF.gif
以上线程池可以调用xx.shutdown()关闭,否则程序会一直挂起
  • ThreadPoolExecutor 这个是上面四个线程池的底层实现具体情况看这里

如果有错误的地方,请大家花一分钟时间回复纠正,谢谢了

你可能感兴趣的:(java 四种线程池)