一.分析教材P132的程序清单:html
//规定了Filter负责拦截全部的用户请求的过滤范围。编程
long before = System.currentTimeMillis(); .......... long after = System.currentTimeMillis();服务器
//将请求强制转换为HttpServletRequest型再赋给HttpServletRequest 请求对象hrequest网络
HttpServletRequest hrequest = (HttpServletRequest) request ; 多线程
//经过getServletPath()函数打印Filter 已经拦截到用户的请求的地址异步
System.out.println("Filter 已经拦截到用户的请求的地址: " + hrequest.getServletPath()); socket
二.总结JEETT文档中两段代码的差异,并分析启动代码后的效果有什么不一样?async
1.首先介绍一下什么是异步处理、异步任务函数
异步处理:异步的概念和同步相对。当一个异步过程调用发出后,调用者不能马上获得结果。实际处理这个调用的部件在完成后,经过状态、通知和回调来通知调用者。以CAsycSocket类为例(注意,CSocket从CAsyncSocket派生,可是其功能已经由异步转化为同步),当一个客户端经过调用 Connect函数发出一个链接请求后,调用者线程马上能够朝下运行。当链接真正创建起来之后,socket底层会发送一个消息通知该对象。这里提到执行部件和调用者经过三种途径返回结果:状态、通知和回调。可使用哪种依赖于执行部件的实现,除非执行部件提供多种选择,不然不受调用者控制。若是执行部件用状态来通知,那么调用者就须要每隔必定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这实际上是一种很严重的错误)。若是是使用通知的方式,效率则很高,由于执行部件几乎不须要作额外的操做。线程
AsyncTask: 即asynchronous task,异步任务。AsyncTask其实是围绕Thread和Handler设计的一个辅助类,在内部是对Thread和Handler的一种封装。AsyncTask的异步体如今由后台线程进行运算(访问网络等比较耗时的操做),而后将结果发布到用户界面上来更新UI,使用AsyncTask使得我不用操做Thread和Handler。
2.异步与同步的区别是什么?
同步与异步的区别:在于请求的内容是否是马上返回,同步请求须要等待结果返回后才能继续执行。单线程的执行的时候,须要顺序执行,若是碰到一个计算量很大,很耗时的函数须要执行,该线程就必须在这里等待结果计算出来之后,才能继续执行。
异步请求理论上不须要等待请求的结果,将耗时的计算交给另一个线程,在结果计算完成后会通知主线程。实际上,异步请求会马上获得一个临时结果,而后异步请求就能够继续执行了,当异步线程返回真正结果后再通知主线程,而后主线程在作出动做。
3.根据上面的基础知识,可大体得出文档中代码的区别为:
(1)request.startAsync()
致使请求被异步处理; 在服务方法结束时,响应不会发送到客户端。
(2)acontext.start(new Runnable() {…})
从容器中获取新线程。
(3)run()
内部类的方法的代码在新线程中执行。内部类能够访问异步上下文以从请求读取参数并写入响应。调用complete()
异步上下文的 方法将提交响应并将其发送给客户端。
运行效果不一样之处:使用异步处理后的例子在大负载的状况下响应速度变快,服务器吞吐量变大
参考:http://www.cnblogs.com/real-psyyyy1015/p/8641580.html