分析代碼:教材P132&JEETT文檔

一.分析教材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

相關文章
相關標籤/搜索