Java中對引用型別的賦值和返回是原子操作嗎?

時間 2021-05-30 07:34:43

1樓:楊陽洋DMC

JMM記憶體模型,有八種操作,

lock,unlock,read,load,use,assign,store,write這八個操作是原子操作。另外就是 synchronized,和 volatile相關原子操作。

你這new的物件,編譯成位元組碼看一下,應該有load use等指令,所以不是原子的。

2樓:dwing

不加volatile的long和double在32位JVM上的讀寫不是原子性的, 而在64位JVM上無論加不加volatile都是原子性的.

引用的讀寫無論是32位還是64位,無論加不加volatile,都是原子性的,因為引用本質上就是指標,指標大小跟位數是一致的.

不過僅此而已, 通常僅僅讀寫乙個變數的原子性遠遠不夠邏輯上的原子性, 只能保證多執行緒併發讀寫引用(指標)不會導致JVM崩掉而已.

3樓:圓胖腫

不管是不是,你不應該關心這種問題

原子操作並不應該程式設計師去關心

你應該交給比如vert.x這種工具去解決

最笨的方式就是加上synchronized關鍵字

Java中,如果賦值Integer型別的物件為null,那麼它會有預設值嗎

CookerJp Integer不會有預設值,因為包裝型別是類,類是分配位址空間的,你指定Integer為null,說明jvm只會定義乙個類物件,但是不會給這個類物件newInstance,int型別不能直接定義為null,就是為了給預設值 最靈活的胖子 這個要看你怎麼使用了,具體來說有兩種情況,1...

php 物件賦值 一般賦值和引用賦值的記憶體實行方式?

jackson 其實在PHP官網有詳細的說明物件賦值的問題,文中提到乙個物件變數儲存的是指向物件的控制代碼,把乙個物件變數賦值給另外乙個物件就是把物件控制代碼拷貝乙份,只不過這個物件控制代碼執行同乙個物件。而引用就是乙個變數的別名,他們指向相同的資料。原文截圖 php.net manual zh l...

Java中兩個new的物件對 做比較可以返回true嗎?

東吳大嘟嘟 自己overload 這個operator是有可能返回true的。但是單純比較的話,比較的是兩個object的reference物件是不是乙個。 北南 或許他說的是這個?Integer a 127Integer b 127System.out.println a b true,如果是12...