您的位置:首页 > 编程语言 > Java开发

Java 中 ++ 操作符的线程安全

2017-11-24 19:20 351 查看
今天看到一道面试题:Java 中 ++ 操作符是线程安全的吗?

 答案:不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交差。



对于此答案进行拓展:查到了一些关于i++的线程安全的有关知识:





说起原子性的操作,是指读和写是原子性的,比如i=5;这个就是一个原子性的操作。

但是两个原子性的操作合在一起进行,就不一定是原子性的了,比如先读后写,那么就有可能在读之后这个变量被修改过。

i++就是这样的一个操作,先读后写,所以说整型变量是原子性的,不是说i++就是一个原子性的操作。

[b]在多线程的情况下:当你使用for(int i=0; i<10000; i++){System.out.print(i)}[/b]

你会发现,i到最后不会打印出10000,打印出8-9千个数字左右。



所以说在多线程的情况下,就算整型变量是原子性的,也有可能会出现线程安全的问题,这个是线程可见性的问题,所以需要加上volatile声明才行,

该修饰符是强制变量每次从内存中读取,而不会存储在寄存器中。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: