线程池的成长之路

Posted 后端初学者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池的成长之路相关的知识,希望对你有一定的参考价值。

每天一篇好文章系列18年第71

编者按

         Java web实际上是用线程池处理请求的。web服务器的最底层是一个socket,这个socket监听并接收到达的tcp连接,这个连接被建立时就可以通过解析、读取文件,然后将这个信息封装成一个http请求,之后这个请求被移交至web应用程序。



01

正文:


1.背景



相信大家在面试过程中遇到面试官问线程的很多,线程过后就是线程池了。从易到难,都是这么个过程,还有就是确实很多人在工作中接触线程池比较少,最多的也就是创建一个然后往里面提交线程,对于一些经验很丰富的面试官来说,一下就可以问出很多线程池相关的问题,与其被问的晕头转向,还不如好好学习。此时不努力更待何时。



02

2.什么是线程池



线程池是一种多线程处理形式,处理过程中将任务提交到线程池,任务的执行交由线程池来管理。


如果每个请求都创建一个线程去处理,那么服务器的资源很快就会被耗尽,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。



03


3.Java线程池的种类



a. newSingleThreadExecutor


b.newFixedThreadPool


c.newCachedThreadPool


d.newScheduledThreadPool


e.newWorkStealingPool


下面是一个newsingleThreadExecutor的创建方式:


ExecutorService pool = Executors.newSingleThreadExecutor();

一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

使用方式:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPool {
   public static void main(String[] args) {
       ExecutorService pool = Executors.newSingleThreadExecutor();
       for (int i = 0; i < 10; i++) {
           pool.execute(() -> {
               System.out.println(Thread.currentThread().getName()
+
" 开始发车啦....");
           });
       }
   }
}

点评

线程池的知识平时用的比较少,但却是面试中常见的问题,因此好好掌握一下也是应该的,而且web应用后阶段肯定是会用到线程池优化性能的。

线程池的成长之路  本文选自微信公众号 纯洁的微笑 《面试-线程池的成长之路》
线程池的成长之路  想要了解更多信息可以持续关注本公众号,每天一篇好文章,助你早日变成一 名合格的程序猿~



相关阅读推荐





 

点击左下角阅读原文 

以上是关于线程池的成长之路的主要内容,如果未能解决你的问题,请参考以下文章

面试-线程池的成长之路

小白成长之路:初识python --python线程池

UC成长之路13

线程池的问题

我的Python成长之路---第八天---Python基础(23)---2016年3月5日(晴)

从0到1Flink的成长之路(二十)-扩展:并行度(Parallelism)