Kyl*_*oN- 2 java atomic race-condition atomicity
我读到原始数据类型,如布尔,字节,短,字符,整数和浮点数都是原子的。像long和double这样的64位数据类型则不是。
但是,这是什么意思?当我有2个在int变量上递增和递减的线程时,有时我仍会遇到竞态条件。
例如将金额添加到变量的字节码。
getfield #2 <Field int amount>
iload_1
iadd
putfield #2 <Field int amount>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,原子操作是否是每个单个操作(getfield,iadd ...),而不是全部加法?
当我有2个在int变量上递增和递减的线程时,有时我仍会遇到竞态条件。
是的,您会的-因为即使int变量的“ get”和“ set”操作都是原子的,但这并不意味着“ increment”操作是原子的。
在这种情况下,原子操作是否是每个单个操作(getfield,iadd ...),而不是全部加法?
对,就是这样。实际上,原始类型不是原子的-它是原子的读取和写入操作。那是很大的不同。
| 归档时间: |
|
| 查看次数: |
760 次 |
| 最近记录: |