在Java中,已经实现了4中内置的线程池,这四种我不多聊。

大家各种网站论坛都能查得到。

现在说一下这四种线程池的基类:

ThreadPoolExecutor
在ThreadPoolExecutor中你可以定义自由的线程池:
如定长线程池、可缓存线程池,现在按照我写的一个定长线程池来说一下:
我的线程池管理类:TaskThreadPoolManager cachedThreadPool = new ThreadPoolExecutor(MAX_THREADPOOLSIZE, MAX_THREADPOOLSIZE, 1, TimeUnit.HOURS, queue, new ThreadPoolExecutor.CallerRunsPolicy());
在其中主要设定了一个LinkedBlockingQueue
这个阻塞队列对象,可以帮助我们干什么呢?
简单理解:
当你设定线程池的最大线程数量为maximumPoolSize时,如果有新的执行任务进来,新线程任务不被执行将会被缓存在LinkedBlockingQueue之中。
举个栗子:
当你从MQ接收到10个消息,有10个线程在同时处理这个消息的内容,
当MQ又来了20个消息,而你需要等前10个消息处理完才能处理这20个消息
如果你设定阻塞队列深度为20,那么这20条消息将会被接收,待处理的内容将会存在阻塞队列中
同时,你可以在接收消息的线程中,判定阻塞队列的大小,从而约束服务器是否继续接收消息(避免内存挤崩)。
所以,加上前面正在处理的10条消息,你在MQ中只接收到了30条消息。。。。。。
说到这里,大家应该对阻塞队列的使用了如执掌了。
那么下面,说一下JDK默认线程池暴露在外面的执行方法:
public abstract void execute(@org.jetbrains.annotations.NotNull Runnable command);
没错,是一个Runnable实现类,所以执行起来很简单啦:
cachedThreadPool.execute(runnable);
runnable就是你的线程。
是不是够简单?
好吧、、、我承认排版很烂,以后会加强此方面#83
最后,问大家一个问题,你们说实现线程的两种方式哪一种更好呢?
请忽略JDK8的线程实现方式~~~


Java线程池简聊的更多相关文章

  1. 深入浅出Java线程池:源码篇

    前言 在上一篇文章深入浅出Java线程池:理论篇中,已经介绍了什么是线程池以及基本的使用.(本来写作的思路是使用篇,但经网友建议后,感觉改为理论篇会更加合适).本文则深入线程池的源码,主要是介绍Thr ...

  2. Java线程池详解(一)

    一.线程池初探 所谓线程池,就是将多个线程放在一个池子里面(所谓池化技术),然后需要线程的时候不是创建一个线程,而是从线程池里面获取一个可用的线程,然后执行我们的任务.线程池的关键在于它为我们管理了多 ...

  3. Java 线程池框架核心代码分析--转

    原文地址:http://www.codeceo.com/article/java-thread-pool-kernal.html 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和 ...

  4. Java线程池使用说明

    Java线程池使用说明 转自:http://blog.csdn.net/sd0902/article/details/8395677 一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极 ...

  5. (转载)JAVA线程池管理

    平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头.怎么做一套简便的线程开发模式 ...

  6. Java线程池的那些事

    熟悉java多线程的朋友一定十分了解java的线程池,jdk中的核心实现类为java.util.concurrent.ThreadPoolExecutor.大家可能了解到它的原理,甚至看过它的源码:但 ...

  7. 四种Java线程池用法解析

    本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 执行一个异步任务你还只是如下 ...

  8. Java线程池的几种实现 及 常见问题讲解

    工作中,经常会涉及到线程.比如有些任务,经常会交与线程去异步执行.抑或服务端程序为每个请求单独建立一个线程处理任务.线程之外的,比如我们用的数据库连接.这些创建销毁或者打开关闭的操作,非常影响系统性能 ...

  9. Java线程池应用

    Executors工具类用于创建Java线程池和定时器. newFixedThreadPool:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程.在任意点,在大多数 nThread ...

随机推荐

  1. 一文搞懂volatile的可见性原理

    说volatile之前,了解JMM(Java内存模型)有助于我们理解和描述volatile关键字.JMM是Java虚拟机所定义的一种抽象规范,用来屏蔽不同硬件和操作系统的内存访问差异,让Java程序在 ...

  2. 4.1Go if-else

    1. Go if-else Golang程序的流程控制决定程序如何执行,主要有三大流程控制,顺序控制.分支控制.循环控制. 条件语句需要定义一个或多个条件,并且对条件测试的true或false来决定是 ...

  3. 07.django日志配置

    https://docs.djangoproject.com/en/3.0/topics/logging/ https://yiyibooks.cn/xx/python_352/library/log ...

  4. 【JAVA习题一】古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    斐波那契函数:f(n)=f(n-1)+f(n-2); package XXXXX; import java.util.Scanner; public class Fbonaci斐波那契 { publi ...

  5. 织梦DEDECMS网站如何生成xml格式网站地图

    这个很简单,按照我下边提供的方法进行操作就可以了,我一直在用 第一步,登陆DedeCMS后台:核心 - 频道模型- 自由列表管理,点击添加列表: 参数按照下边的填写: 自由列表标题:[XML地图] 列 ...

  6. WordPress获取某个分类关联的标签

    我在WordPress后台某篇文章的编辑页面,给这篇文章选择了分类:WordPress,接着同时选择了标签:php.主题制作,这时分类(WordPress)就与标签(php.主题制作)建立了关联,利用 ...

  7. JZOJ 4611. 【NOI2016模拟7.11】接水问题 (贪心+A*+可持久化线段树)

    Description: https://gmoj.net/senior/#main/show/4611 题解: 先把A从大到小排序,最小的由排序不等式显然. 考虑类似第k短路的A*的做法. 定义状态 ...

  8. pytest 使用

    import pytestfrom web_ui_YXBI.test_datas.common_datas import Common_Datas as cfrom selenium import w ...

  9. Kivy中ActionBar控件的使用

    这个控件可以作为导航栏来使用,效果非常好. 1. ActionBar包含的组件 ActionBar中需要一个ActionView作为容器来存放其他控件,比如:ActionPrevious.Action ...

  10. 百度前端技术学院2018笔记 之 利用 CSS animation 制作一个炫酷的 Slider

    前言 题目地址 利用 CSS animation 制作一个炫酷的 Slider 思路整理 首先页面包含三种东西 一个是type为radio的input其实就是单选框 二是每个单选框对应的label 三 ...