java并发编程(19):并发新特性—executor框架与线程池(含代码)-编程开发技术

java并发编程(19):并发新特性—executor框架与线程池(含代码)-编程开发技术

ID:30778915

大小:311.06 KB

页数:14页

时间:2019-01-03

java并发编程(19):并发新特性—executor框架与线程池(含代码)-编程开发技术_第1页
java并发编程(19):并发新特性—executor框架与线程池(含代码)-编程开发技术_第2页
java并发编程(19):并发新特性—executor框架与线程池(含代码)-编程开发技术_第3页
java并发编程(19):并发新特性—executor框架与线程池(含代码)-编程开发技术_第4页
java并发编程(19):并发新特性—executor框架与线程池(含代码)-编程开发技术_第5页
资源描述:

《java并发编程(19):并发新特性—executor框架与线程池(含代码)-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、hva并发编程(19):并发新特性一Executor框架与线程池(含代码)-编程开发技术Java并发编程(19):并发新特性—Executor框架与线程池(含代码)原文岀处:兰亭风雨Executor框架简介在Java5之后,并发编程引入了一堆新的启动、调度和管理线程的APToExecutor框架便是Java5中引入的,其内部使用了线程池机制,它在java.util,cocurrent包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java5之后,通过Executor来启动线程比使

2、用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)夕卜,还有关键的一点:有助于避免this逃逸问题一一如果我们在构造器中启动一个线程,因为另一个任务可能会在构造器结束之前开始执行,此时可能会访问到初始化了一半的对彖用Executor在构造器小。Executor框架包括:线程池,Executor,Executors,ExecutorService,CompletionService,Future,Callable等。Executor接口中之定义了一个方法execute(Runn

3、ablecommand),该方法接收一个Runable实例,它用來执行一个任务,任务即一个实现了Runnable接口的类。ExccutorScrvicc接II继承口Executor接II,它提供了更丰富的实现多线程的方法,比如,ExecutorService捉供了关闭自己的方法,以及可为跟踪一个或多个异步任务执彳亍状况而生成Future的方法。可以调用ExecutorService的shutdown()方法来平滑地关闭ExecutorService,调用该方法后,将导致ExecutorService停止接受任

4、何新的任务且等待已经提交的任务执行完成(已经提交的任务会分两类:一类是已经在执行的,另一类是还没有开始执行的),当所冇已经捉交的任务执行完毕后将会关闭ExecutorService。因此我们一般用该接口来实现和管理多线程。ExecutorService的生命周期包括三种状态:运行、关闭、终止。创建后便进入运行状态,当调用了shutdown()方法时,便进入关闭状态,此时意味着ExccutorScrvicc不再接受新的任务,但它述在执行已经提交了的任务,当素有已经提交了的任务执行完后,便到达终止状态。如果不调用

5、shutdown()方法,ExecutorService会一直处在运行状态,不断接收新的任务,执行新的任务,服务器端一般不需要关闭它,保持一一直运行即可。Executors提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExccutorScrvicc接口。publicstaticExecutorServicenewFixedThreadPool(intnThreads)创建固定数目线程的线程池。publicstaticExecutorServicenewCachedThreadPool()创建一个可缓

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

7、情况下可用来替代Timer类。这四种方法都是用的Executors中的ThreadFactory建立的线程,下面就以上四个方法做个比较newCachedThreadPool()?????????????????????????????????9?999??9?9?99?999999?999999?99999999■缓存型池子,先查看池中冇没有以前建立的线程,如果冇,就reuse.如果没有,就建一个新的线程加入池中■缓存型池了通常用于执行一些生存期很短的界步型任务因此在一些面向连接的daemon型SERVER中

8、用得不多。但对于牛•存期短的异步任务,它是Executor的首选。-能reuse的线程,必须是timeoutIDLE内的池中线程,缺省??timeout是60s,超过这个IDLE时长,线程实例将被终止及移出池。?注意,放入CachedThreadPool的线程不必担心-K结束,超过TIMEOUT不活动,其会H动被终止。newFixedThreadPool(int)-newFixedThreadPoo

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

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

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