欢迎来到天天文库
浏览记录
ID:30778719
大小:54.50 KB
页数:7页
时间:2019-01-03
《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
此文档下载收益归作者所有