話不多說,直接貼測試類:
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介面,就...