日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Servlet总结04——注意Servlet单实例的线程安全性

發布時間:2025/1/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Servlet总结04——注意Servlet单实例的线程安全性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Servlet容器采用了單實例多線程的方式(Servlet容器默認的設置),這樣可以減少創建實例的開銷,提高效率。

但是在多線程方面也埋下了不少隱患,需要開發者格外小心。



(一)變量的安全性

錯誤實例:

public class test extends HttpServlet{String user = "" ;public void doGet(HttpServletRequest req , HttpServletResponse res) throws ServletException , IOException{user = req.getParameter("user");......}}

  例如:a、b同時訪問這個servlet,a提交的user=aaa,b提交的user=bbb。

首先,servlet容器分配一個線程T-a來處理請求a,獲取其user的值aaa,并賦給變量user。此時T-a時間片到了,servlet容器分配另外一個線程T-b來處理請求b,

獲取其user的值bbb,并覆蓋變量user,當T-a線程重新獲取執行權時,user已經“物是人非”了。

這里可以類比:jdbc的事務管理,“丟失更新”和這個場景類似。
?

解決方案:

1)定義本地變量,將user在doGet方法中定義。

因為user是本地變量,每一個線程都有user變量的拷貝,彼此不受影響。
?

2)設置方法同步(或者同步塊)

因為設置了同步,可以防止多個線程同時調用doGet方法。但是所有請求該servlet的“請求”將串行處理,影響效率。






總結

以上是生活随笔為你收集整理的Servlet总结04——注意Servlet单实例的线程安全性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。