問題:使用以下的**演示servlet的執行緒安全問題?
12 response.getoutputstream().write(("執行緒名:"+thread.currentthread().getname()+"count="+this
. count).getbytes());13}
14 }
同時訪問以上的**發現三次同時出現3,這就是執行緒的併發訪問的問題。
解決方案就是:同步
給訪問共享資源的**加鎖。
13 response.getoutputstream().write(("執行緒名:"+thread.currentthread().getname()+"count="+this
.count).getbytes());14}
15}16 }
總結:1.如果直接使用同步關鍵字,那麼會導致servlet的執行效率嚴重的降低。
2.盡量避免使用servlet的成員變數。
3.如果避免不了那麼我們就需要使用執行緒安全的成員變數。
arraylist vector hashset
如果需要不是執行緒安全的集合可以使用collections進行執行緒安全的轉換
4.servletcontext、httpsession需要使用的時候一定要使用同步。
5.在servlet中最好使用區域性變數。
執行緒安全性
定義 當多個執行緒訪問某個類時,不管執行環境採用何種呼叫方式或者這些執行緒如何交替執行,並且在主調 中不需要任何額外的同步或者協同,這個類都能表現出正確的行為,那麼就稱這個類是執行緒安全的。主要表現三個方面 atomic cas unsafe.compareandswapint atomiclong...
執行緒安全性
執行緒安全性 當多個執行緒訪問某個類時,這個類始終都能表現出正確的行為,那麼稱這個類是執行緒安全的。執行緒不安全產生的問題 競態條件 由於不恰當的執行時序而出現不正確的結果。大多數競態條件的本質是基於一種可能失效的觀察結果來做出判斷或者執行某個計算。常見先檢查後執行,延遲初始化 單例模式 讀取 修改...
STL 執行緒安全性
stl 執行緒安全性 摘錄 在所有的主流stl實現方案中,幾乎所有的容器都是執行緒安全的 1 乙個執行緒讀寫乙個例項時,另乙個執行緒可以讀寫另乙個例項。2 多個執行緒可以在同時讀同乙個container。3 多個執行緒讀寫同乙個container時,你應該負責安排互斥性操作。乙個特例是std str...