i++和++i的区别,及其线程安全问题
来源:互联网 发布:cpu测试软件 linux 编辑:程序博客网 时间:2024/06/05 11:40
i++和++i都是i=i+1的意思,但是过程有些许区别:
i++:先赋值再自加。(例如:i=1;a=1+i++;结果为a=1+1=2,语句执行完后i再进行自加为2)
++i:先自加再赋值。(例如:i=1;a=1+++i;结果为a=1+(1+1)=3,i先自加为2再进行运算)
但是在单独使用时没有区别:如for(int i=0;i<10;i++){ }和for(int i=0;i<10;++i) { }没有区别。
i++和++i的线程安全分为两种情况:
1、如果i是局部变量(在方法里定义的),那么是线程安全的。因为局部变量是线程私有的,别的线程访问不到,其实也可以说没有线程安不安全之说,因为别的线程对他造不成影响。
2、如果i是全局变量(类的成员变量),那么是线程不安全的。因为如果是全局变量的话,同一进程中的不同线程都有可能访问到。
如果有大量线程同时执行i++操作,i变量的副本拷贝到每个线程的线程栈,当同时有两个线程栈以上的线程读取线程变量,假如此时是1的话,那么同时执行i++操作,再写入到全局变量,最后两个线程执行完,i会等于3而不会是2,所以,出现不安全性。
0 0
- i++和++i的区别,及其线程安全问题
- 从volatile说到i++的线程安全问题
- 从volatile说到i++的线程安全问题
- Java并发(1) i++的线程安全问题
- 从volatile说到i++的线程安全问题
- 从volatile说到i++的线程安全问题
- i++和++i的区别
- "i++"和"++i"的区别
- ++i 和 i++ 的区别
- i++和++i的区别
- i++和++i的区别
- i++和++i的区别
- i++和++i的区别
- i++和++i的区别
- i++和++i的区别
- ++i和i++的区别
- i++和++i的区别
- ++i和i++的区别
- activiti学习笔记1---20170323
- Spring MVC框架form标签和input标签的使用
- [天池竞赛系列] 历届天池竞赛答辩PPT和视频
- fresco的初次使用
- 并发编程——线程通信
- i++和++i的区别,及其线程安全问题
- Java之Java中的变量--书(P23)
- Shell:重复执行一个命令n次
- 选择关系型数据库还是非关系型数据库
- 分层开发 第四章 MD5加密
- ZOJ 1577 GCD & LCM 数论
- Lintcode 用栈实现队列
- wpf 动画 visibility
- 文章标题