位置: 编程技术 - 正文

【java线程池】(java线程池创建)

编辑:rootadmin

推荐整理分享【java线程池】(java线程池创建),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java线程池最佳实践,java线程池实战,java线程池的用法,java中线程池,java线程池原理,java线程池原理,java线程池队列有几种,java线程池的工作原理,内容如对您有帮助,希望把文章链接给更多的朋友!

文地址:jenkov 作者: Jakob Jenkov 译者:长源 校对:方腾飞

java线程池(Thread Pool)对于限制应用程序中同一时刻运行的线程数很有用。因为每启动一个新线程都会有相应的性能开销,每个线程都需要给栈分配一些内存等等。

我们可以把并发执行的任务传递给一个线程池,来替代为每个并发执行的任务都启动一个新的线程。只要池里有空闲的线程,任务就会分配给一个线程执行。在线程池的内部,任务被插入一个阻塞队列(Blocking Queue ),线程池里的线程会去取这个队列里的任务。当一个新任务插入队列时,一个空闲线程就会成功的从队列中取出任务并且执行它。

线程池经常应用在多线程服务器上。每个通过网络到达服务器的连接都被包装成一个任务并且传递给线程池。线程池的线程会并发的处理连接上的请求。以后会再深入有关 Java 实现多线程服务器的细节。

Java 5 在 java.util.concurrent 包中自带了内置的线程池,所以你不用非得实现自己的线程池。你可以阅读我写的 java.util.concurrent.ExecutorService 的文章以了解更多有关内置线程池的知识。不过无论如何,知道一点关于线程池实现的知识总是有用的。

【java线程池】(java线程池创建)

这里有一个简单的线程池实现:

public class ThreadPool { private BlockingQueue taskQueue = null; private List<PoolThread> threads = new ArrayList<PoolThread>(); private boolean isStopped = false; public ThreadPool(int noOfThreads, int maxNoOfTasks) { taskQueue = new BlockingQueue(maxNoOfTasks); for (int i=0; i<noOfThreads; i&#;&#;) { threads.add(new PoolThread(taskQueue)); } for (PoolThread thread : threads) { thread.start(); } } public void synchronized execute(Runnable task) { if(this.isStopped) throw new IllegalStateException("ThreadPool is stopped"); this.taskQueue.enqueue(task); } public synchronized boolean stop() { this.isStopped = true; for (PoolThread thread : threads) { thread.stop(); } }}复制代码<span style="color: rgb(, , ); font-family: Arial, Helvetica, sans-serif; line-height: px; widows: auto; background-color: rgb(, , );">(校注:原文有编译错误,我修改了下)</span>复制代码

线程池的实现由两部分组成。类 ThreadPool 是线程池的公开接口,而类 PoolThread 用来实现执行任务的子线程。

为了执行一个任务,方法 ThreadPool.execute(Runnable r) 用 Runnable 的实现作为调用参数。在内部,Runnable 对象被放入 阻塞队列 (Blocking Queue),等待着被子线程取出队列。

一个空闲的 PoolThread 线程会把 Runnable 对象从队列中取出并执行。你可以在 PoolThread.run() 方法里看到这些代码。执行完毕后,PoolThread 进入循环并且尝试从队列中再取出一个任务,直到线程终止。

调用 ThreadPool.stop() 方法可以停止 ThreadPool。在内部,调用 stop 先会标记 isStopped 成员变量(为 true)。然后,线程池的每一个子线程都调用 PoolThread.stop() 方法停止运行。注意,如果线程池的 execute() 在 stop() 之后调用,execute() 方法会抛出 IllegalStateException 异常。

子线程会在完成当前执行的任务后停止。注意 PoolThread.stop() 方法中调用了 this.interrupt()。它确保阻塞在 taskQueue.dequeue() 里的 wait() 调用的线程能够跳出 wait() 调用(校对注:因为执行了中断interrupt,它能够打断这个调用),并且抛出一个 InterruptedException 异常离开 dequeue() 方法。这个异常在PoolThread.run() 方法中被截获、报告,然后再检查 isStopped 变量。由于 isStopped 的&#;是 true, 因此PoolThread.run() 方法退出,子线程终止。

android录音开发 MediaRecorder类详解手机一般都有麦克风和摄像头,而Android系统就可以利用这些硬件来录制音视频了。为了增加对录制音视频的支持,Android系统提供了一

Android -- service两种启动方式startService与bindService 继上一篇文章,Android–Service的使用,我们来继续看看Service的两种启动方式第一种startService。运行代码,得知以下几点结论:我们了解它的启动周期为on

[android] listView解析 在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。抽空把对ListView的使用做了整理,并写了

标签: java线程池创建

本文链接地址:https://www.jiuchutong.com/biancheng/376607.html 转载请保留说明!

上一篇:Android中Pull解析器解析xml文件案例(如何得到pull解析器?)

下一篇:android录音开发(app录音功能开发)

  • 退个税手续费如何申报
  • 不可抵扣进项税额转出
  • 小规模纳税人专票免税吗?
  • 事务所纳税
  • 销售人员购买的产品
  • 公司汽车购置税怎么交
  • 企业购买土地如何做账
  • 视同销售计入销售费用能税前扣除吗
  • 预付款项包括哪些项目
  • 设备折旧费用的作用
  • 企业期货投资收益税务案例
  • 银行按揭方式销售开发产品
  • 自制半成品具体如何处理账务?
  • 跨省的分公司亏损需要缴纳所得税吗?
  • 企业所得税工资薪金和个税申报里一致么
  • 无形资产摊销年限平均法怎么算
  • 水电费的发票要交税吗
  • 小规模纳税人需要汇算清缴吗
  • 现金流量表附表的其他指的是什么
  • 收代扣代缴个税手续费会计分录
  • 失控发票进项税转出申报怎么填
  • 一般纳税人附加税费减免政策
  • 多缴增值税怎么退税
  • 自己生产的水泥用于建造厂房
  • 主营业务收入平均增长率计算例题
  • 生育津贴报销需要准生证吗
  • php数组函数输出《咏雪》里有多少"片"字
  • rtlrack.exe - rtlrack是什么进程 有什么用
  • 核定企业应税收怎么算
  • win11dev预览版可以升级正式版吗
  • 收入汇缴账户可以冻结吗
  • 角马群的迁徙方向
  • 企业之间拆借资金
  • 作废的专票能认证过去吗
  • 勘察设计四个阶段
  • css如何实现文字循环滚动左到右,再从右到左衔接循环
  • 去年多计提的所得税怎么调整
  • 税务滞纳金计入什么会计科目
  • 租赁办公场所的法律规定
  • 织梦使用手册
  • mysql数据库外键约束怎么写
  • 分公司开票总公司收款怎么做账
  • 售后服务费计提政策
  • 培训费发票开具的要求有?
  • 税前列支的项目
  • 以前年度多计管理费用怎么调整
  • 会计记账凭证的填制要求
  • 小规模企业税收优惠政策2022
  • 贷款利息收入如何核算
  • 车辆处置缴纳增值税税率
  • 红字冲销发票流程
  • 公司 股东 变更
  • 私人账户可以打钱到公司账户吗
  • 建筑公司工程按什么收费
  • 减免税做营业外收入的会计分录
  • 预付卡充值入什么科目
  • 事业单位开办费与注册资本的关系
  • 以物易物方式销售货物的增值税处理
  • 工会经费计提的比例是多少
  • 金融资产或金融负债初始入账价值
  • 维修基金只有收据没有发票吗
  • Windows任务栏中的活动程序间不能切换对吗
  • windows10预览版是什么
  • 在苹果电脑mac上怎么下载
  • 无法安装osx
  • win7系统如何设置
  • windows8触屏功能
  • win10安装autocad2016错误
  • linux卸载repo
  • cocos2dx4.0入门
  • unity商店资源在unity中打开
  • javascript正则匹配两个点
  • android之Java+html+javascript混合开发
  • jquery ajax分页插件的简单实现
  • 一个绿色的球英语怎么读
  • java教程
  • 发票查询打印如何操作
  • 企业如何网上申报税
  • 所得税季度预缴申报表怎样填写
  • 上海市税务局的电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设