servlet 線程不安全,想必你們都知道了,原本想在網上找個例子試驗下,結果沒找到....仍是本身寫一個吧。java
1.證實servlet線程不安全例子編程
寫一個模擬http訪問的 客戶端程序,用一個線程池對固定的servlet訪問1000次,看servlet的計數器是否等於1000。安全
servlet 的程序以下所示:線程
最後運行得到的count的最大的結果是990,不是1000.爲何count的值不等於1000,由於++count不是原子操做,當多個線程對count進行讀寫操做時,就會出錯。(詳見java編程實踐第二章)rem
2.servlet線程安全方式get
主要有三種方式servlet
1.將 int 類型的count用AtomicInteger代替,count.incrementAndGet()把當前值以原子方式加1:it
最後count的結果是1000,證實有效原理
2.使用synchronized加鎖,保證操做的原子性:百度
最後count的結果是1000,證實有效:
3.使用lock機制,保證原子性。(和第二方式的內部原理相同)
最後count的結果是1000,證實有效
注意訪問不一樣的servlet,要修改相應的訪問地址。
不知道到怎麼在bolg中加代碼,放在百度雲盤上了....
源代碼下載http://pan.baidu.com/share/link?shareid=40296&uk=3357993878