1. 程式人生 > >(五)servlet執行緒安全問題

(五)servlet執行緒安全問題

  1. 容器預設情況下對於某個servlet,只會建立一個例項。而容器每收到一個請求就會啟動一個執行緒來處理,。這樣就有可能有多個執行緒同時訪問一個servlet例項,就有可能產生執行緒安全問題。—-在多個執行緒同時訪問同一個資源,而操作這個資源又是非原子性的(a=5是原子性的,a=b+1就不是原子性的),才有可能存線上程安全問題。

    不存線上程安全問題的程式碼:
    這裡寫圖片描述

存線上程安全問題的程式碼:

這裡寫圖片描述
把i定義成全域性變數,當多個執行緒併發訪問變數時,就會存線上程安全問題了,如下圖,同時開啟兩個瀏覽器模擬並擬併發訪問同一個servlet,正常情況下,一個瀏覽器結果時2,另一個瀏覽器結果時3,結果兩個瀏覽器結果都是3.說明存線上程安全問題。
這裡寫圖片描述

那麼如何解決這個問題呢,最簡單的方法是加鎖,當然這樣同時也會帶來效率問題。因為所有訪問這個servlet的人都必須排隊輪流訪問。
這裡寫圖片描述

現在還在學習中,還沒有更好的解決方案,以後會再更新,各位有好的解決方法,謝謝留言分享給大家