位置: 编程技术 - 正文

【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录音功能开发)

  • 纳税信用等级评定在哪里查询
  • 维修费税率是13的话归口什么类别
  • 季度报表的利润表是填本月数填六月的书吗
  • 可供出售金融资产和交易性金融资产
  • 上缴非税收入前是否要交税
  • 异地预缴怎么做账
  • 不得开具增值税专票情形包括
  • 计提工资是包含社保吗
  • 被告承担诉讼费用
  • 确认增值税时要通过未缴增值税科目吗
  • 增值税负数发票可以作废吗?
  • 当月开票当月付款分录
  • 利得和损失计入所有者权益
  • 收到银行承兑会计分录
  • 取得与收益相关的政府补助会计分录
  • 从银行取现回单怎么取
  • 委托贷款利息收入账务处理
  • 支票付款提示
  • 从免税到征税企业应该怎么做
  • 缺联发票税务怎么处理
  • 税号里的字母是什么
  • 哪些票据可以冲销
  • 预缴的税款可以互抵吗
  • 跟银行借款按月还款
  • 4s店开业有什么优惠
  • 通讯费 个税
  • 增值税罚款怎么做凭证
  • 接管财务要对接哪些内容?
  • windows10如何设置锁屏时间
  • win 11 发布
  • 会计结算要求
  • 常见的dump抓取方法
  • 房地产无证销售法律风险
  • 公司承担的社保公积金怎么做账
  • 房地产开发企业销售自行开发的房地产项目
  • 蓝桥杯第十四届省赛获奖名单
  • 货物及劳务包括哪些内容
  • 税收优惠与政府补助对于企业研发来说哪个优惠力度大
  • 个人所得税转账扣除子女教育那个什么时候可以提交
  • 销售人员的工资属于什么会计科目
  • 印花税步骤
  • 管理费用科目包括
  • 企业哪些进项税不能抵扣
  • 进项税转出金额怎么算
  • 工资的内容包括很多项
  • 中小企业应交税费怎么算
  • 当月已经认证的发票可以取消认证吗
  • 企业投资期货亏损能抵税么
  • 贸易公司如何核名
  • 土地使用税怎么征收标准
  • 提前报废固定资产需要补提折旧
  • 收到退回多付的材料退款
  • 发票抬头公司报销的该怎么写
  • 支付宝如何打印付款凭证
  • winxp系统连接网络
  • 如何利用excel的数据制作图表
  • 强制关闭mac系统的快捷键
  • macoshosts文件位置
  • windows7旗舰版怎么扩展c盘
  • win10系统打开word出现水渍
  • mac 硬盘数据恢复
  • 华硕和联想笔记本电脑哪个好点
  • kprcycleaner.exe是什么
  • 保存 linux
  • linux发布项目
  • WIN10系统怎么改成泰语
  • c#程序代码大全
  • wifi显示开发状态
  • 用户允许控制
  • ie浏览器怎么设置打开网页在同一个窗口
  • android style文件
  • shell中的grep怎么用
  • nodejs调用打印机驱动
  • node爬取数据
  • web docs
  • unity?
  • 原生js实现ajax步骤
  • 如何查询车辆购置税完税证明
  • 为什么非贸易付不了款呢
  • 电子票据如何报销
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设