tomcat中的執行緒問題2

2021-06-28 00:11:56 字數 1944 閱讀 8310

最近在看執行緒的有關知識,碰到乙個小問題,目前還沒有解決,現記錄下來。

如果在我們自己寫的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...