servlet線程不安全的實例已及解決辦法

       servlet 線程不安全,想必你們都知道了,原本想在網上找個例子試驗下,結果沒找到....仍是本身寫一個吧。java

1.證實servlet線程不安全例子編程

      寫一個模擬http訪問的 客戶端程序,用一個線程池對固定的servlet訪問1000次,看servlet的計數器是否等於1000。安全

http客戶端模擬程序

 

servlet 的程序以下所示:線程

unSafeServlet

最後運行得到的count的最大的結果是990,不是1000.爲何count的值不等於1000,由於++count不是原子操做,當多個線程對count進行讀寫操做時,就會出錯。(詳見java編程實踐第二章)rem

2.servlet線程安全方式get

主要有三種方式servlet

1.將 int 類型的count用AtomicInteger代替,count.incrementAndGet()把當前值以原子方式加1:it

AtomicIntegerSafeServlet

最後count的結果是1000,證實有效原理

2.使用synchronized加鎖,保證操做的原子性:百度

synchronizedSafeServlet

最後count的結果是1000,證實有效:

3.使用lock機制,保證原子性。(和第二方式的內部原理相同)

lockSafeServlet

最後count的結果是1000,證實有效

注意訪問不一樣的servlet,要修改相應的訪問地址。

不知道到怎麼在bolg中加代碼,放在百度雲盤上了....

源代碼下載http://pan.baidu.com/share/link?shareid=40296&uk=3357993878

相關文章
相關標籤/搜索