javaexecutor框架学习总结

javaexecutor框架学习总结

ID:30778719

大小:54.50 KB

页数:7页

时间:2019-01-03

javaexecutor框架学习总结_第1页
javaexecutor框架学习总结_第2页
javaexecutor框架学习总结_第3页
javaexecutor框架学习总结_第4页
javaexecutor框架学习总结_第5页
资源描述:

《javaexecutor框架学习总结》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、大多数并发都是通过任务执行的方式来实现的。一•般有两种方式执行任务:串行和并行。classSingleThreadWebServer{publicstaticvoidmain(String[]args)throwsException{ServerSocketsocket=newServerSocket(80);while(true){Socketconn=socket.accept();handleRequest(conn);}}}classThreadPerTaskWebServer{publicstaticvoi

2、dmain(String[]args)throwsException{ServerSocketsocket=newServerSocket(80);while(true){finalSocketconn=socket.accept();Runnabletask=newRunnable(){publicvoidrun(){handleRequest(conn);}};newThread(task)・start();}当然上面的这两种方式都是有问题的。单线程的问题就是并发量会是瓶颈,多线程版本就是无限制的创建线程会导致资

3、源不足问题。Executor框架任务是一组逻辑工作单元,而线程是使任务异步执行的机制。JDK提供了Executor接口:publieinterfaceExecutor{voidexecute(Runnablecommand);}虽然Executor接口比较简单,但是却是异步任务执行框架的基础,该框架能支持多种不同类型的任务执行策略。它提供了一•种标准的方式把任务的捉交过程与执行过程进行了解耦。用Runnable来代表任务。Executor的实现提供了对生命周期的支持以及统计信息应用程序管理等机制。Executor是基

4、于生产者消费者模式的,提交任务的操作相当于生产者,执行任务的线程相当于消费。基于Executor的Webserver例子如卜:publieclassTaskExecutorWebServer{privatestaticfinalintNTHREADS=100;privatestaticfinalExecutorexec=Executors.newFixedThreadPool(NTHREADS);publicstaticvoidmain(String[]args)throwsException{Serversocke

5、tserversocket=newServersocket(80);while(true){finalSocketconn=serversocket・accept();Runnabletask=newRunnable(){©Overridepublicvoidrun(){handleRequest(conn);}};exec.execute{task);}}}另外可以白己实现Executor来控制是并发还是并行的,如卜-面代码:*执行己提交的Runnable任务的对象。*此接口提供一种将任务提交与毎个任务将如何运行的

6、机制(包括线程使用的细节、调度等)分离开来的方法。*通常使用Executor而不是显式地创建线程。*@authorrenchunxiao*/publieclassExecutorDemo{publicstaticvoidmain(String[]args){Executorexecutor=newThreadExecutor();executor•execute(newRunnable(){©Overridepublicvoidrun()//dosomething}});Executorexecutor2=newSe

7、rialExecutor();executor2・execute(newRunnable(){©Overridepublicvoidrun(){//dosomething}});}}/***创建i个线程来执行command★*@authorrenchunxiao★*/classThreadExecutorimplementsExecutor{©Overridepublicvoidexecute{Runnablecommand){newThread(command)・start();/***串行执行command**@

8、authorrenchunxiao*/classSerialExecutorimplementsExecutor{©Overridepublicvoidexecute(Runnablecommand){command・run();}}线程池线程池就是线程的资源池,可以通过Executors屮的静态工厂方法來创建线程池。•newFixedThre

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

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

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