202303-16 一篇文章带你了解如何正确使用java线程池 目录1、线程是不是越多越好?2、如何正确使用多线程?3、Java线程池的工作原理4、掌握JUC线程池API总结1、线程是不是越多越好?在学习多线程之前,读者可能会有疑问?如果单线程跑得太慢,那么是否就能多创建多个线程来跑任务?并发的情况,线程是不是创建越多越好?这是一个很经典的问题,画图表示一下创建很多线程的情况,然后进行情况分析。创建线程和销毁线程都是需要时间的,如果创建时间+销毁时间>执行任务时间就很不划... 继续阅读 >
202205-24 Java线程池详细解读 目录1、线程池1.1线程池概念1.2线程池的实现2、StringBuffer类面试题:请解释String、StringBuffer、StringBuilder的区别?3、Runtime类面试题:什么叫gc?如何处理4、System类面试题:请解释final、finally、finalize的区别?5、对象克隆6、Date类6.1日期处理类—Date类6.2日期格式化—SimpleDateFormat类(核心)7、数字操作类—Math类7.1随机数—Random()7.2大数字操作类1.大整数操作类:BigIntegr2.... 继续阅读 >
202205-15 java线程池详解及代码介绍 目录一.线程池简介二、四种常见的线程池详解三、缓冲队列BlockingQueue和自定义线程池ThreadPoolExecutor总结一.线程池简介线程池的概念线程池就是首先创建一些线程,它们的集合称为线程池,使用线程池可以很好的提高性能,线程池在系统启动时既创建大量空闲的线程,程序将一个任务传给线程池。线程池就会启动一条线程来执行这个任务,执行结束后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。线程... 继续阅读 >
202203-16 Java线程池高频面试题总结 目录1、在启动线程时,为什么要通过调用方法start执行方法run,而不能直接执行方法run?2、方法sleep、join和yield的区别有哪些?3.为什么方法wait、notify和notifyAll在Object类定义,而不在Thread类定义?4、终止线程应该使用什么方法?为什么不推荐使用stop和destroy方法来终止线程?5、什么是线程池?6、追问:线程池的好处有哪些?7、说一说线程池是如何创建的?8、向线程池提交任务的流程是什么?9、追问:说一说核心线程和... 继续阅读 >
202112-11 一篇文章带你深入了解Java线程池 目录线程池模型常用线程池ThreadPoolExecutor构造函数参数说明 线程池默认工作行为ForkJoinPoolFutureTask线程数量分析CPU密集型IO密集型总结线程池模型一般的池化模型会有两个方法,用于获取资源和释放资源,就像这样:publicinterfaceXXPool{XXacquire();voidrelease();}但是,工程中的线程池一般是生产者和消费者模型,线程池是消费者,任务的提交者是生产者,下面是一个简化的线程池模型://简化的线程池,... 继续阅读 >
202110-29 Java并发编程面试之线程池 目录什么是线程池线程池好处线程池的执行流程怎么用线程池corePoolSizemaximumPoolSizekeepAliveTimeunitworkQueuethreadFactoryejectedExecutionHandler线程池参数如何设置?监控线程池总结什么是线程池是一种基于池化思想管理线程的工具。池化技术:池化技术简单点来说,就是提前保存大量的资源,以备不时之需。比如我们的对象池,数据库连接池等。线程池好处我们为什么要使用线程池,直接newthreadstart不好吗?「降低资... 继续阅读 >
202110-28 实现java简单的线程池 目录拆分实现流程实现方式1.拒绝策略2.阻塞队列3.线程池和工作线程策略模式对比JDK的线程池线程池的状态转化总结拆分实现流程请看下面这张图首先我们得对线程池进行一个功能拆分ThreadPool就是我们的线程池,t1,t2,t3代表三个线程BlockingQueue代表阻塞队列main代表main方法的线程task1,task2,task3代表要执行的每个任务现在我们梳理一下执行的流程,注意这里是简略版的,文章后面我会给出详细版的所以此时... 继续阅读 >
202109-22 详解Java线程池是如何重复利用空闲线程的 在Java开发中,经常需要创建线程去执行一些任务,实现起来也非常方便,但如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。此时,我们很自然会想到使用线程池来解决这个问题。使用线程池的好处:降低资源消耗。java中所有的池化技术都有一个好处,就是通过复用池中的对象,降低系统资源消耗。设想一下如果我们有n多个子任... 继续阅读 >
202109-10 Java线程池中的各个参数如何合理设置 一、前言在开发过程中,好多场景要用到线程池。每次都是自己根据业务场景来设置线程池中的各个参数。这两天又有需求碰到了,索性总结一下方便以后再遇到可以直接看着用。虽说根据业务场景来设置各个参数的值,但有些万变不离其宗,掌握它的原理对如何用好线程池起了至关重要的作用。那我们接下来就来进行线程池的分析。二、ThreadPoolExecutor的重要参数我们先来看下ThreadPoolExecutor的带的那些重要参数的构造器。publicThreadP... 继续阅读 >
202107-17 详解什么是Java线程池的拒绝策略? 目录一、拒绝策略1.1AbortPolicy(默认拒绝策略)1.2CallerRunsPolicy(使用调用线程池的线程来执行任务)1.3DiscardPolicy(忽略新任务)1.4DiscardOldestPolicy(忽略老任务)1.5 自定义拒绝策略一、拒绝策略(JDK提供了4种,另外也可以自定义拒绝策略,因此总共有5种。)线程池中的线程已经用完了,无法继续为新任务服务,同时,等待队列也已经排满了,再也塞不下新任务了。这时候我们就需要拒绝策略机制合理的处理... 继续阅读 >
202107-01 浅谈Java ThreadPoolExecutor的使用 目录一、前言二、ThreadPoolExecutor三、构造函数参数解析四、总结一、前言线程池主要由以下4个核心组件组成。线程池管理器:用于创建并管理线程池工作线程:线程池中执行具体任务的线程任务接口:用于定义工作线程的调度和执行策略,只有线程实现了该接口,线程中的任务才能被线程池调度任务队列:放待处理的任务,新的任务将会不断被加入队列中,执行完成的任务将从队列中移除二、ThreadPoolExecutor如下是线程... 继续阅读 >
202107-01 浅谈Java线程池的7大核心参数 目录前言一、线程池的创建及重要参数二、ThreadPoolExecutor中重要的几个参数详解三、workQueue队列(阻塞队列)四、常见的几种自动创建线程池方式五、线程池实现线程复用的原理六、手动创建线程池(推荐)七、Springboot中使用线程池前言java中经常需要用到多线程来处理一些业务,我不建议单纯使用继承Thread或者实现Runnable接口的方式来创建线程,那样势必有创建及销毁线程耗费资源、线程上下文切换问题。同时创建过多的线程也可... 继续阅读 >
202104-27 Java多线程之线程池七个参数详解 ThreadPoolExecutor是JDK中的线程池实现,这个类实现了一个线程池需要的各个方法,它提供了任务提交、线程管理、监控等方法。下面是ThreadPoolExecutor类的构造方法源码,其他创建线程池的方法最终都会导向这个构造方法,共有7个参数:corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadFactory、handler。publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,... 继续阅读 >
202103-05 深入理解Java线程池从设计思想到源码解读 线程池:从设计思想到源码解析前言初识线程池线程池优势线程池设计思路深入线程池构造方法任务队列拒绝策略线程池状态初始化&容量调整&关闭使用线程池ThreadPoolExecutorExecutors封装线程池解读线程池execute()addWorker()Worker类runWorker()processWorkerExit()前言各位小伙伴儿,春节已经结束了,在此献上一篇肝了一个春节假期的迟来的拜年之作,希望读者朋友们都能有收获。根据穆氏哲学,投入越多,收获越大。我作此文时... 继续阅读 >