Java多线程框架Executor详解.docx

Java多线程框架Executor详解.docx

ID:49438361

大小:357.08 KB

页数:11页

时间:2020-03-01

Java多线程框架Executor详解.docx_第1页
Java多线程框架Executor详解.docx_第2页
Java多线程框架Executor详解.docx_第3页
Java多线程框架Executor详解.docx_第4页
Java多线程框架Executor详解.docx_第5页
资源描述:

《Java多线程框架Executor详解.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、为什么引入Executor线程池框架newThread()的缺点每次newThread()耗费性能调用newThread()创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪。不利于扩展,比如如定时执行、定期执行、线程中断采用线程池的优点重用存在的线程,减少对象创建、消亡的开销,性能佳可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞提供定时执行、定期执行、单线程、并发数控制等功能Executor的介绍在Java5之后,并发编程引入了一堆新的启动、调度和管理线程的API。Execu

2、tor框架便是Java5中引入的,其内部使用了线程池机制,它在java.util.cocurrent包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java5之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免this逃逸问题——如果我们在构造器中启动一个线程,因为另一个任务可能会在构造器结束之前开始执行,此时可能会访问到初始化了一半的对象用Executor在构造器中。Executor框架包括:线程池,Executor,Execu

3、tors,ExecutorService,CompletionService,Future,Callable等。Executors方法介绍Executors工厂类通过Executors提供四种线程池,newFixedThreadPool、newCachedThreadPool、newSingleThreadExecutor、newScheduledThreadPool。1.publicstaticExecutorServicenewFixedThreadPool(intnThreads)创建固定数目线程的线程池。2.publicstaticExecutorSe

4、rvicenewCachedThreadPool()创建一个可缓存的线程池,调用execute将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有60秒钟未被使用的线程。3.publicstaticExecutorServicenewSingleThreadExecutor()创建一个单线程化的Executor。4.publicstaticScheduledExecutorServicenewScheduledThreadPool(intcorePoolSize)创建一个支持定时及周期性的任务执

5、行的线程池,多数情况下可用来替代Timer类。1.newFixedThreadPool创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。示例ExecutorServiceexecutorService=Executors.newFixedThreadPool(5);for(inti=0;i<20;i++){RunnablesyncRunnable=newRunnable(){@Overridepublicvoidrun(){Log.e(TAG,Thread.currentThread().getName());}};executorServ

6、ice.execute(syncRunnable);}运行结果:总共只会创建5个线程,开始执行五个线程,当五个线程都处于活动状态,再次提交的任务都会加入队列等到其他线程运行结束,当线程处于空闲状态时会被下一个任务复用2.newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程示例:ExecutorServiceexecutorService=Executors.newCachedThreadPool();for(inti=0;i<100;i++){RunnablesyncRunnable=newRunnable

7、(){@Overridepublicvoidrun(){Log.e(TAG,Thread.currentThread().getName());}};executorService.execute(syncRunnable);}运行结果:可以看出缓存线程池大小是不定值,可以需要创建不同数量的线程,在使用缓存型池时,先查看池中有没有以前创建的线程,如果有,就复用.如果没有,就新建新的线程加入池中,缓存型池子通常用于执行一些生存期很短的异步型任务3.newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行schedule(Runna

8、blecommand,longdela

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

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

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