线程池的成长之路
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应用后阶段肯定是会用到线程池优化性能的。
相关阅读推荐
点击左下角阅读原文
以上是关于线程池的成长之路的主要内容,如果未能解决你的问题,请参考以下文章