最近在看執行緒的有關知識,碰到乙個小問題,目前還沒有解決,現記錄下來。
如果在我們自己寫的servlet裡有成員變數,因為多執行緒的訪問就會出現一些執行緒問題。這點大家都知道,我們看下面的例子。
}}部署在tomcat7上
然後我們在瀏覽器上發兩個鏈結。
當a傳送後,過半秒後傳送b。
我們可以看到a請求的返回頁是什麼都沒有
而b上顯示
使用者名稱:a
使用者名稱:b
為什麼會有這個效果是因為,a請求的output這個變數在多執行緒的情況下被b執行緒的output覆蓋了。所以"兩個"(其實只有乙個)servlet的輸出流物件都定位到b上面了。
這是乙個經典的例子。
再看下面這個。
}和第乙個例子似乎差不多,只是變數由printwriter變成了int。
我們在做三個請求。
在tomcat7下 結果是
com.zwchen.servlet.******servlet@109da93:
counter = 0
counter = 1
counter = 2
counter = 3
counter = 4
counter = 5
counter = 6
counter = 7
counter = 8
counter = 9
com.zwchen.servlet.******servlet@109da93:
counter = 10
counter = 11
counter = 12
counter = 13
counter = 14
counter = 15
counter = 16
counter = 17
counter = 18
counter = 19
com.zwchen.servlet.******servlet@109da93:
counter = 20
counter = 21
counter = 22
counter = 23
counter = 24
counter = 25
counter = 26
counter = 27
counter = 28
counter = 29
並沒有出現我們想象中的亂序問題。
一種解釋是tomcat7中使用了threadpoolexecutor技術。
但是我依然不明白,那為什麼同是在tomcat7下,第乙個例子就會出現覆寫的問題呢?
這個問題,估計的看原始碼才行。
如果有哪位大俠知道問題的答案請告訴我,跪謝了。
感謝glt
參考資料
tomcat中的執行緒
tomcat啟動過程中會啟動許多執行緒 這裡總結下 tomcat4 thread main 為主執行緒,tomcat 啟動時的執行緒。daemon thread httpconnector 8080 http聯結器。daemon thread httpprocessor 8080 0 http處理執...
Tomcat中的記憶體洩漏問題
停止tomcat服務的時候,log裡面報了不少的記憶體錯誤資訊。經查詢是tomcat6.0.24以後會檢測到的問題。leak cause detected by tomcat fixed by tomcat possible enhancements custom threadlocal class...
TOMCAT中的乙個問題
這兩天在客戶端部署bo報表系統遇到乙個奇怪問題,tomcat啟動面板打出來的日誌資訊埠號為8181,但我在server.xml檔案裡面已經將埠號改為了8107,但為什麼會是8181呢!真是一頭霧水。用ue在tomcat目錄下所有檔案裡面都搜了一遍字元為 8181 的檔案,但乙個也找不到。這個8181...