Servlet是執行緒安全的嗎?

2021-08-29 18:22:24 字數 482 閱讀 9436

servlet不是執行緒安全的。

要解釋為什麼servlet為什麼不是執行緒安全的,需要了解servlet容器(即tomcat)使如何響應http請求的。

當tomcat接收到client的http請求時,tomcat從執行緒池中取出乙個執行緒,之後找到該請求對應的servlet物件並進行初始化,之後呼叫service()方法。要注意的是每乙個servlet物件再tomcat容器中只有乙個例項物件,即是單例模式。如果多個http請求請求的是同乙個servlet,那麼著兩個http請求對應的執行緒將併發呼叫servlet的service()方法。

上圖中的thread1和thread2呼叫了同乙個servlet1,所以此時如果servlet1中定義了例項變數或靜態變數,那麼可能會發生執行緒安全問題(因為所有的執行緒都可能使用這些變數)。

servlet是執行緒安全的嗎

servlet 預設是單例模式,在web 容器中只建立乙個例項,所以多個執行緒同時訪問servlet的時候,servlet是執行緒不安全的。那麼 web 容器能為每個請求建立乙個servlet的例項 增加了系統的消耗 嗎?當然是可以的,只要servlet實現singlethreadmodel介面,就...

i 是執行緒安全的嗎?

i 不是原子操作,也就是說,它不是單獨一條指令,而是3條指令 3條彙編指令 1 從記憶體中把i的值取出來放到cpu的暫存器中 2 cpu暫存器的值 1 3 把cpu暫存器的值寫回記憶體 由於執行緒共享棧區,不共享堆區和全域性區,所以當且僅當 i 位於棧上是安全的,反之不安全 i也同理 因為如果是全域...

HashMap是執行緒安全的嗎?

答,不是。雜湊碰撞或擴容導致。還有兩處可能不安全 在擴容的時候插入資料,有可能會把新插入的覆蓋住 在擴容的時候刪除資料,會刪除不了。如果我在擴容時,在資料從舊陣列複製到新陣列過程中,這時候某個執行緒插入一條資料,這時候是插入到新陣列中,但是在資料複製過程中,hashmap是沒有檢查新陣列上的位置是否...