国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

tomcat中Servlet對象池介紹及如何使用

2019-11-02 16:48:04
字體:
來源:轉載
供稿:網友

tomcat中Servlet對象池

Servlet在不實現SingleThreadModel的情況下運行時是以單個實例模式,如下圖,這種情況下,Wrapper容器只會通過反射實例化一個Servlet對象,對應此Servlet的所有客戶端請求都會共用此Servlet對象,而對于多個客戶端請求tomcat會使用多線程處理,所以應該保證此Servlet對象的線程安全,多個線程不管執行順序如何都能保證執行結果的正確性。例如剛做web應用開發時可能會犯的一個錯誤:在某個Servlet中使用成員變量累加去統計訪問次數,這就存在線程安全問題。

為了支持一個Servlet對象對應一個線程,Servlet規范提出了一個SingleThreadModel接口,tomcat容器必須要完成的機制是:如果某個Servlet類實現了SingleThreadModel接口則要保證一個線程獨占一個Servlet對象。假如線程1正在使用Servlet對象1,則線程2只能用Servlet對象2。

針對SingleThreadModel模式,tomcat的Wrapper容器使用了對象池策略,Wrapper容器會有一個Servlet堆保存若干個該Servlet對象,當需要該Servlet對象時從堆中pop一個對象,而當用完后則push回堆中。Wrapper容器中最多可以有20個該Servlet對象,例如xxxServlet類的對象池,已經有20個線程占用了20個對象,那么第21個線程執行時就會阻塞等待,直到對象池中有可用的對象才繼續執行。

整個流程如下圖所示,某個線程處理客戶端請求,它首先嘗試從Servlet對象池中獲取Servlet對象,此時如果對象池有可用對象則直接返回一個對象,如果不夠使用則繼續實例化Servlet對象并push進對象池,但Servlet對象的總數量必須保證在20個以內,如果20個Servlet對象都被其他線程使用了,那么就必須要等到其他線程用完放回后才能獲取,此時該線程會一直阻塞等待。從對象池中獲取到Servlet對象后則調用Servlet對象的service方法對客戶端請求進行處理,處理完后再將Servlet對象放回對象池中。

本節介紹了Servlet對象池,它是為了支持Servlet規范SingleThreadModel接口而引入的,它就是一個棧結構,需要時就pop一個對象,使用完就push回去。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌兰县| 浦江县| 嵊州市| 池州市| 庄浪县| 酒泉市| 海门市| 阿拉善右旗| 庆阳市| 永清县| 隆尧县| 扶沟县| 太白县| 昂仁县| 阿坝| 荣成市| 白沙| 海宁市| 汝南县| 大石桥市| 宝山区| 华容县| 广德县| 虹口区| 扎鲁特旗| 秭归县| 清苑县| 丰台区| 武穴市| 桐柏县| 雅安市| 临泽县| 虎林市| 富蕴县| 诏安县| 高要市| 绍兴县| 贵溪市| 双鸭山市| 独山县| 嘉黎县|