java并发-原子性和可见性(7)
来源:互联网 发布:mac怎么设置独立显卡 编辑:程序博客网 时间:2024/06/12 20:30
原子性:某个操作同时只能由一个线程执行。
可见性:一个线程的修改对其他线程是可见的。也就是A线程修改了变量x,那么B,C,D...线程此时去拿到的x肯定是A修改之后的值。
package com.concurenny.chapter.six;/** * 创建者:Mr lebron 创建时间:2017年11月17日 下午2:27:32 */public class AtomicityDemo {private static int count = 0;public static void main(String[] args) {// 不是原子操作,可能会出现重复输出for (int i = 0; i < 100; i++) {new Thread(() -> {System.out.println(add(1));}).start();}// 原子操作,不会有问题// for (int i = 0; i < 200; i++) {// new Thread(() -> {// System.out.println(add2(1));// ;// }).start();// }}public static int add(int plus) {// count = count + plus 显然不是原子操作。// count = count+plus可能执行过程:// 有2个线程A,B同时执行该方法// 1.A:寄存器读取count.// 2.B:寄存器读取count./// 3.A:对count执行+plus// 4.B:A:对count执行+plus// 5.A:赋值给count 这一步显然得到了B线程的执行结果,并不是A线程想要的。// 6.B:赋值给count// 这里原子性就是指A线程在执行count = count + plus操作时,整个过程不能有其他线程参与。// 可见性是指A执行count = count + plus之后的count对B可见,也就是B拿到的count是A计算之后的count的值。count = count + plus;return count;}// 加上synchronized之后,保证了原子性和可见性。因为同时只能有一个线程执行该方法,执行完毕会将变量count的值刷新到内存中。其他线程执行该方法会得到新值。public static synchronized int add2(int plus) {int rst = count + plus;return rst;}}
相关文章:
http://ifeve.com/java%E9%94%81%E6%98%AF%E5%A6%82%E4%BD%95%E4%BF%9D%E8%AF%81%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%81%E6%80%A7%E7%9A%84/
阅读全文
0 0
- java并发-原子性和可见性(7)
- Java并发编程1-原子性和可见性
- Java并发编程--原子性和可见性
- java并发(共享,互斥,原子,可见,顺序性)
- Java多线程总结(5)— 原子性、可见性、有序性和并发库的原子性操作
- 【并发】java并发之可见性与原子性
- java并发之原子性与可见性(一)
- java并发之原子性与可见性
- java并发之原子性、可见性、有序性
- java并发之原子性与可见性
- java并发之原子性与可见性(一)
- java并发之原子性与可见性
- java并发之原子性与可见性
- java并发之原子性与可见性(一)
- java并发特性: 原子性、有序性、可见性
- 并发编程——原子性,可见性和有序性
- 可见性和原子性——JAVA并发编程指南
- Java复习-并发编程中的三个问题:原子性、可见性和有序性
- static用法
- Android异步线程OkHttp Post请求Json数据并解析
- pandas dataFrame to_excel 报错[ UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 7
- 秒杀系统架构分析与实战
- django cannot be applied to a naive datetime
- java并发-原子性和可见性(7)
- 【笔记】etc/profile和~/.bashrc的区别
- 开通博客学习驱动
- OpenCV + Python 实现人脸识别
- 20个常用的正则表达式
- 机器学习初学者——常见算法篇
- 用自己的电脑做服务器搭建网站并让互联网访问
- 初识Impala及与Hive对比
- cinder添加一个新功能流程