簡體   English   中英

為什么 java 中的讀取操作是原子的?

[英]why the read operation in java is atomic?

public class Hello {
static volatile int a;
public static void main(String[] args) {

    a=200;
    a=100;
    a=a+1;

}}

字節碼如下

0 sipush 200
3 putstatic #2 <jvm_test/Hello.a>
6 bipush 100
8 putstatic #2 <jvm_test/Hello.a>
11 getstatic #2 <jvm_test/Hello.a>
14 iconst_1
15 iadd
16 putstatic #2 <jvm_test/Hello.a>
19 return

a=200 由 sipush 200 和 putstatic #2 組成,而不是一個操作。 所以,為什么我們說這是原子的

sipush將數字 200 推入堆棧,而putstatic將堆棧頂部的值分配給類的 static 字段。

這兩個字節碼指令可以一起被視為原子的原因是因為“堆棧”是當前線程的堆棧; 其他線程有自己的堆棧,因此它們不能在這兩條指令之間干擾線程中堆棧上的內容。

如果數字 200 的臨時存儲空間是其他線程可寫的共享 memory,那么它確實不是線程安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM