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

2022-09-07 10:06:08 字數 591 閱讀 6464

話不多說,直接貼測試類:

public

class

threadunsafedemo

trycatch

(interruptedexception e)}}

);} latch.

await()

; system.out.

println

("執行完畢...");

}public

synchronized

static

void

safemethod()

}

執行結果:

結果:不安全,因為i++,++i會在記憶體中新建個int j = i+1,然後將j賦值給i,當執行緒在新建了j的時候,cpu進行了切換,這時候i還是等於原來的值,就會導致不安全,以出票舉例,賣出了99號票賣出了多張…

解決,方法加synchronized,使用atomicinteger,也就是使用atomic包下的類,他的方法是具有原子性的…

i 是執行緒安全的嗎?

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

Servlet是執行緒安全的嗎?

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

servlet是執行緒安全的嗎

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