i 是執行緒安全的嗎?

2021-08-26 03:09:21 字數 440 閱讀 2420

i++不是原子操作,也就是說,它不是單獨一條指令,而是3條指令(3條彙編指令)

1、從記憶體中把i的值取出來放到cpu的暫存器中

2、cpu暫存器的值+1

3、把cpu暫存器的值寫回記憶體

由於執行緒共享棧區,不共享堆區和全域性區,所以當且僅當 i 位於棧上是安全的,反之不安全(++i也同理).   因為如果是全域性變數的話,同一程序中的不同執行緒都有可能訪問到。對於讀值,+1,寫值這三步操作,在這三步任何之間都可能會有cpu排程產生,造成i的值被修改,造成髒讀髒寫。

volatile不能解決這個執行緒安全問題。因為volatile只能保證可見性,不能保證原子性。

int i 和 i是執行緒安全的嗎

話不多說,直接貼測試類 public class threadunsafedemo trycatch interruptedexception e latch.await system.out.println 執行完畢.public synchronized static void safemeth...

Servlet是執行緒安全的嗎?

servlet不是執行緒安全的。要解釋為什麼servlet為什麼不是執行緒安全的,需要了解servlet容器 即tomcat 使如何響應http請求的。當tomcat接收到client的http請求時,tomcat從執行緒池中取出乙個執行緒,之後找到該請求對應的servlet物件並進行初始化,之後呼...

servlet是執行緒安全的嗎

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