首页 > 试题广场 >

多线程中的i++线程安全吗?为什么?

[问答题]
多线程中的i++线程安全吗?请简述一下原因?
不安全。i++不是原子性操作。i++分为读取i值,对i值加一,再赋值给i++,执行期中任何一步都是有可能被其他线程抢占的。
发表于 2019-05-05 15:17:06 回复(0)
不安全。每个线程都有自己的工作内存,每个线程需要对共享变量操作时必须把共享变量从主内存中加载到自己的工作内存。等完成操作再保存到内存中。如果一个线程运算完成后还没刷到主内存中,另一个线程又对这个共享变量进行操作,那么读取到的数据就是脏数据了。
发表于 2019-02-21 16:00:04 回复(0)
不安全。i++不是原子性操作。i++分为读取i值,对i值加一,再赋值给i++,执行期中任何一步都是有可能被其他线程抢占的。
发表于 2019-04-28 22:17:04 回复(0)

小白有个疑问,我在别人的博客中看到有如下的说法:

如果i是局部变量(在方法里定义的),那么是线程安全的。因为局部变量是线程私有的,别的线程访问不到,其实也可以说没有线程安不安全之说,因为别的线程对他造不成影响。

https://www.cnblogs.com/feifeicui/p/10528380.html

他说如果i是局部变量,那么i++是线程安全的,但是我看到大家的回答都是线程不安全。我实在是很懵,有大佬能解释一下吗......

发表于 2020-05-11 10:56:24 回复(0)
不安全,i++不是原子性操作,i++分为读取值,对值进行+1,然后在赋值给i++,执行期间都有可能被其他线程抢占。
发表于 2020-02-28 15:37:12 回复(0)
不安全。i++不是原子性操作。i++分为读取i值,对i值加一,再赋值给i++,执行期中任何一步都是有可能被其他线程抢占的。
发表于 2019-04-30 19:11:39 回复(0)
不安全
发表于 2019-04-27 16:17:18 回复(0)