java并发-原子性和可见性(7)
2017-11-17 14:53
246 查看
原子性:某个操作同时只能由一个线程执行。
可见性:一个线程的修改对其他线程是可见的。也就是A线程修改了变量x,那么B,C,D...线程此时去拿到的x肯定是A修改之后的值。
相关文章:
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/
可见性:一个线程的修改对其他线程是可见的。也就是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/
相关文章推荐
- Java并发_volatile实现可见性但不保证原子性
- java并发编程--原子性、可见性、有序性
- 【并发】java并发之可见性与原子性
- Java并发12:并发三特性-原子性、可见性和有序性概述及问题示例
- Java多线程总结(5)— 原子性、可见性、有序性和并发库的原子性操作
- Java并发_volatile实现可见性但不保证原子性
- java 并发概念与内存分析,原子性、可见性、有序性
- 【Java并发编程】原子性访问
- Java| Java并发特性: 原子性、有序性、可见性
- java并发之原子性与可见性(一)
- Java并发:volatile内存可见性和指令重排
- Java 线程概述: 线程种类、状态,原子性、内存可见性、synchronized、volatile
- Java并发-1(一)内存可见性
- JAVA并发编程学习笔记------对象的可见性及发布逸出
- 并发库应用之二 & Java原子性操作类应用
- java挑战高并发(13):synchronized对内存可见性起到的作用
- java 并发原子性与易变性 来自thinking in java4 21.3.3
- 【Java并发编程】:并发编程中实现内存可见的两种方法比较:加锁和volatile变量
- 【Java并发编程】之十四:图文讲述同步的另一个重要功能:内存可见性
- 【Java并发编程】之十四:图文讲述同步的另一个重要功能:内存可见性