Java线程池简聊
在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线程池简聊的更多相关文章
- 深入浅出Java线程池:源码篇
前言 在上一篇文章深入浅出Java线程池:理论篇中,已经介绍了什么是线程池以及基本的使用.(本来写作的思路是使用篇,但经网友建议后,感觉改为理论篇会更加合适).本文则深入线程池的源码,主要是介绍Thr ...
- Java线程池详解(一)
一.线程池初探 所谓线程池,就是将多个线程放在一个池子里面(所谓池化技术),然后需要线程的时候不是创建一个线程,而是从线程池里面获取一个可用的线程,然后执行我们的任务.线程池的关键在于它为我们管理了多 ...
- Java 线程池框架核心代码分析--转
原文地址:http://www.codeceo.com/article/java-thread-pool-kernal.html 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和 ...
- Java线程池使用说明
Java线程池使用说明 转自:http://blog.csdn.net/sd0902/article/details/8395677 一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极 ...
- (转载)JAVA线程池管理
平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头.怎么做一套简便的线程开发模式 ...
- Java线程池的那些事
熟悉java多线程的朋友一定十分了解java的线程池,jdk中的核心实现类为java.util.concurrent.ThreadPoolExecutor.大家可能了解到它的原理,甚至看过它的源码:但 ...
- 四种Java线程池用法解析
本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 执行一个异步任务你还只是如下 ...
- Java线程池的几种实现 及 常见问题讲解
工作中,经常会涉及到线程.比如有些任务,经常会交与线程去异步执行.抑或服务端程序为每个请求单独建立一个线程处理任务.线程之外的,比如我们用的数据库连接.这些创建销毁或者打开关闭的操作,非常影响系统性能 ...
- Java线程池应用
Executors工具类用于创建Java线程池和定时器. newFixedThreadPool:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程.在任意点,在大多数 nThread ...
随机推荐
- SQL Server存储过程模拟HTTP请求POST和GET协议
/****** Object: StoredProcedure [dbo].[sp_http_get] Script Date: 05/23/2020 15:47:09 ******/ SET ANS ...
- 统计元音(hdu20)
输入格式:输入一个整型,再循环输入带空格的字符串. 思考:先用scanf()函数输入一个整型,后面直接来个大循环,带空格字符串输入直接用gets()函数. 注意:由于scanf()里面多加了%c,&a ...
- python 生成随机字符串
1.生成随机字符串 #数字+字母+符号 def getRandChar(n): l = [] #sample = '0123456789abcdefghijklmnopqrstuvwxyz!@#$%^ ...
- 花6个月写的付费专栏,免费送|仿开源框架从零到一完整实现高性能、可扩展的RPC框架
作者 渡码,阿里巴巴码农,公众号:渡码 作者,专注大数据开发.数据分析和Python技术. 关注公众号 渡码 回复关键字 manis,可获取电子书.各章节和完整源代码,并且可加入读者群一起交流问题. ...
- 远程快速安装redis和远程连接
一.安装redis 1.设置redis的仓库地址, 执行命令: yum install epel-release 出现下图即设置成功 2.安装redis 执行命令如下: yum insta ...
- Spring 使用注解对事务控制详解与实例
1.什么是事务 一荣俱荣,一损俱损,很多复杂的操作我们可以把它看成是一个整体,要么同时成功,要么同时失败. 事务的四个特征ACID: 原子性(Atomic):表示组成一个事务的多个数据库的操作的不可分 ...
- S32DS编译程序出现Type region `SRAM' overflowed by 19240 bytes错误
用S32DS编译工程遇到Type region `SRAM' overflowed by 19240 bytes错误(芯片为S9KEAZ64AMLH) 程序中未初始化的变量存放SRAM中 当程序出现未 ...
- 【Mathtype】安装Mathtype后,word无法粘贴的问题
Win10安装mathtype后,word工具栏中自动添加mathtype的选项(mathtype为了使用户更加方便使用,故自动添加),但是却导致word无法粘贴.如何解决该问题? [方案1]官网描述 ...
- Unity 游戏框架搭建 2019 (五十、五十一) 消息机制小结&MonoBehaviourSimplify 是框架?
我们花了 5 篇文章学习了消息机制的方方面面.并且完成了一个简易消息机制,之后集成到了我们的 MonoBehaviourSimplify 里. 现在 MonoBehaviourSimplify 有一点 ...
- [PHP学习教程 - 文件]002.修改上传文件大小限制(File Upload Limit)
引言:通常大家直装xampp之后,默认的文件上传大小应该被设定成2M左右,这个时候如果上传超过2M的东西,就会报错,让人非常尴尬.如何修改呢? 导航索引: 概念 FTP常用API FTP封装类 其他 ...