微交易系统开发语言之Java线程池.docx

微交易系统开发语言之Java线程池.docx

ID:59200306

大小:302.78 KB

页数:12页

时间:2020-09-10

微交易系统开发语言之Java线程池.docx_第1页
微交易系统开发语言之Java线程池.docx_第2页
微交易系统开发语言之Java线程池.docx_第3页
微交易系统开发语言之Java线程池.docx_第4页
微交易系统开发语言之Java线程池.docx_第5页
资源描述:

《微交易系统开发语言之Java线程池.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、微交易系统开发学习之Java线程池线程池的技术背景在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些”池化资源”技术产生的原因。例如Android中常见到的很多通用组件一般都离不开”池”的概念,如各种图片加载库,网络请求库,即使Android的消息传递机制中的Mea

2、asge当使用Meaasge.obtain()就是使用的Meaasge池中的对象,因此这个概念很重要。本文将介绍的线程池技术同样符合这一思想。线程池的优点:·重用线程池中的线程,减少因对象创建,销毁所带来的性能开销;能有效的控制线程的最大并发数,提高系统资源利用率,同时避免过多的资源竞争,避免堵塞;能够多线程进行简单的管理,使线程的使用简单、高效。线程池框架Executorjava中的线程池是通过Executor框架实现的,Executor框架包括类:Executor,Executors,ExecutorService,ThreadPoolExecuto

3、r,Callable和Future、FutureTask的使用等。Executor:所有线程池的接口,只有一个方法。123publicinterfaceExecutor{voidexecute(Runnablecommand);}ExecutorService:增加Executor的行为,是Executor实现类的最直接接口。Executors:提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口。ThreadPoolExecutor:线程池的具体实现类,一般用的各种线程池都是基于这个类实现的。构造方法如下:1234

4、5678publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,BlockingQueueworkQueue){this(corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue,Executors.defaultThreadFactory(),defaultHandler);910}·corePoolSize:线程池的核心线程数,线程池中运行的线程数也

5、永远不会超过corePoolSize个,默认情况下可以一直存活。可以通过设置allowCoreThreadTimeOut为True,此时 核心线程数就是0,此时keepAliveTime控制所有线程的超时时间。maximumPoolSize:线程池允许的最大线程数;keepAliveTime:指的是空闲线程结束的超时时间;unit :是一个枚举,表示keepAliveTime的单位;workQueue:表示存放任务的BlockingQueue

6、oncurrent下的主要用来控制线程同步的工具。如果BlockQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒。同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有空间才会被唤醒继续操作。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。具体的实现类有LinkedBlockingQueue,

7、ArrayBlockingQueued等。一般其内部的都是通过Lock和Condition(显示锁(Lock)及Condition的学习与使用)来实现阻塞和唤醒。线程池的工作过程如下1.线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。2.当调用execute()方法添加一个任务时,线程池会做如下判断:3.如果正在运行的线程数量小于corePoolSize,那么马上创建线程运行这个任务;如果正在运行的线程数量大于或等于corePoolSize,那么将这个任务放入队列;如果这时候队列满了,而且

8、正在运行的线程数量小于maximumPoolSize,那么还是要创建非核心线程立

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。