(十五)你对线程池的了解有多少?知道为什么阿里不让用Java提供的线程池吗?

简介: 线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位,我们的程序最终都是由线程进行运作。在Java中,创建和销毁线程的动作是很消耗资源的,因此就出现了所谓“池化资源”技术。线程池是池化资源技术的一个应用,所谓线程池,顾名思义就是预先按某个规定创建若干个可执行线程放入一个容器中(线程池),需要使用的时候从线程池中去取,用完之后不销毁而是放回去,从而减少了线程创建和销毁的次数,达到节约资源的目的。

微信搜索《Java鱼仔》,每天一个知识点不错过


(一)每天一个知识点


你对线程池的了解有多少?知道为什么阿里不让用Java提供的线程池吗?


(二)回答


2.1 什么是线程池


线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位,我们的程序最终都是由线程进行运作。在Java中,创建和销毁线程的动作是很消耗资源的,因此就出现了所谓“池化资源”技术。线程池是池化资源技术的一个应用,所谓线程池,顾名思义就是预先按某个规定创建若干个可执行线程放入一个容器中(线程池),需要使用的时候从线程池中去取,用完之后不销毁而是放回去,从而减少了线程创建和销毁的次数,达到节约资源的目的。


2.2 为什么要使用线程池


降低资源消耗


前面已经讲到线程池的出现减少了线程创建和销毁的次数,每个线程都可以被重复利用,可执行多个任务。


提高系统的响应速度


每当有任务到来时,直接复用线程池中的线程,而不需要等待新线程的创建,这个动作可以带来响应速度的提升


防止过多的线程搞坏系统


可以根据系统的承受能力,调整线程池中的工作线程的数量,防止因为线程过多服务器变慢或死机。java一个线程默认占用空间为1M,可以想象一旦手动创建线程过多极有可能导致内存溢出。


2.3 如何去创建线程池


JDK提供了四种标准的线程池:newSingleThreadExecutor、newFixedThreadPool、newCachedThreadPool、newScheduledThreadPool


使用这几种线程池只需要用Executors去调用线程池方法即可,调用方式如下:



ExecutorServiceexecutorService=Executors.newSingleThreadExecutor();

2.4 为什么阿里不让用Executors直接生成线程池


JDK提供的四个线程池底层采用的都是ThreadPoolExecutor来生成,因此为了让开发人员更加了解线程池的运行规则,阿里规约约定线程池的操作都需要手动去创建


ThreadPoolExecutorthreadPoolExecutor=newThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MILLISECONDS, blockingQueue, handler);

ThreadPoolExecutor有核心的七个参数,有关线程池更核心的知识与应用我写了一篇博客,点击下面查看。


面试官:不会真有人不知道什么是线程池吧?

相关文章
|
1天前
|
缓存 Java
【Java基础】简说多线程(上)
【Java基础】简说多线程(上)
5 0
|
1天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
|
1天前
|
安全 Java 编译器
是时候来唠一唠synchronized关键字了,Java多线程的必问考点!
本文简要介绍了Java中的`synchronized`关键字,它是用于保证多线程环境下的同步,解决原子性、可见性和顺序性问题。从JDK1.6开始,synchronized进行了优化,性能得到提升,现在仍可在项目中使用。synchronized有三种用法:修饰实例方法、静态方法和代码块。文章还讨论了synchronized修饰代码块的锁对象、静态与非静态方法调用的互斥性,以及构造方法不能被同步修饰。此外,通过反汇编展示了`synchronized`在方法和代码块上的底层实现,涉及ObjectMonitor和monitorenter/monitorexit指令。
6 0
|
1天前
|
监控 安全 Java
在Java中如何优雅的停止一个线程?可别再用Thread.stop()了!
在Java中如何优雅的停止一个线程?可别再用Thread.stop()了!
7 2
|
1天前
|
Java 调度
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
8 1
|
1月前
|
安全 Java
深入理解Java并发编程:线程安全与性能优化
【2月更文挑战第22天】在Java并发编程中,线程安全和性能优化是两个重要的主题。本文将深入探讨这两个主题,包括线程安全的基本概念,如何实现线程安全,以及如何在保证线程安全的同时进行性能优化。
15 0
|
23天前
|
安全 Java 容器
Java并发编程:实现高效、线程安全的多线程应用
综上所述,Java并发编程需要注意线程安全、可见性、性能等方面的问题。合理使用线程池、同步机制、并发容器等工具,可以实现高效且线程安全的多线程应用。
14 1
|
1月前
|
安全 Java 开发者
Java并发编程中的线程安全性探究
在Java编程中,线程安全性是一个至关重要的问题,涉及到多线程并发访问共享资源时可能出现的数据竞争和不一致性问题。本文将深入探讨Java并发编程中的线程安全性,介绍常见的线程安全性问题以及解决方法,帮助开发者更好地理解和应对在多线程环境下的挑战。
|
1月前
|
安全 Java 开发者
Java并发编程中的线程安全性探究
在Java开发中,多线程编程是一项常见且重要的技术。本文将深入探讨Java并发编程中的线程安全性问题,从数据竞争到同步机制的选择,帮助开发者更好地理解和应对多线程环境下的挑战。
13 2
|
1月前
|
安全 Java
Java并发编程中的线程安全问题与解决方法
在Java开发中,线程安全是一个至关重要的话题。本文将深入探讨Java并发编程中常见的线程安全问题,并结合实际案例介绍解决这些问题的方法,帮助读者更好地理解和应对多线程环境下的挑战。
23 1