Java多线程之synchronized关键字全面解析1.0
2019-03-18 15:34
501 查看
Java在多线程方面有一个synchronized关键字。这个关键字可以称为Java高并发之魂。为什么要引入synchronized关键字呢??我们可以先看一个案例:
首先我们写一个L类负责打印消息
[code]public class L { public static void p(String str) { System.out.println(str); } }
然后我们来写一个测试类:
[code]public class Test implements Runnable { static Test instance = new Test(); static int i = 0; public static void main(String[] args) { Thread thread1 = new Thread(instance); Thread thread2 = new Thread(instance); thread1.start(); thread2.start(); while (thread1.isAlive() || thread2.isAlive()) { } L.p("" + i); } @Override public void run() { for (int j = 0; j < 10000; j++) i++; } }
这个代码很简单 相信大家都看的明白 就是执行 i++ ,但是按照常理来说我们希望i最后的值是 2W 可是运行会发现 i 的值总是小于2W。 为什么呢?
这是因为 一个简单的 i++其实分为三步:
1.读取i 2. i的值增加1 3.将改变后的 i 的值存到内存中。
所以造成结果小于2W的原因就是 thread1中执行完第二步, 还没来得及进行到第三步, thread2中已经开始执行第一步了。
就比如说 thread1中i的值变成了9 然后它准备把写入到内存中 但是还没来得及写入, thread2就开始读取了,那么thread2 读取的值就是8,然后thread2 执行完第二步 ,也变成了9 ,相当于就浪费了一次增加数值的机会。因此得到的结果就会小于2W。
那么我们该如何避免这种后果呢?请看下一章~~
相关文章推荐
- Java线程和多线程(十四)——Synchronized关键字解析
- Java线程和多线程(十四)——Synchronized关键字解析
- Java的多线程之同步篇二:synchronized关键字
- Android中Java instanceof关键字全面解析
- Java 多线程(六) synchronized关键字详解
- Java 多线程 synchronized关键字详解
- 最全面的Java多线程用法解析
- Java多线程系列--"基础篇"04之 synchronized关键字
- Java多线程:synchronized关键字和Lock
- Java 多线程(六) synchronized关键字详解
- Java 多线程(1): synchronized关键字详解
- 初学Java多线程:使用Synchronized关键字同步类方法
- Java对象锁和类锁全面解析(多线程synchronized关键字)
- Java中的static关键字全面解析
- Java多线程系列--“基础篇”04之 synchronized关键字
- Java 多线程:synchronized 多线程同步关键字
- Java 多线程(二) synchronized关键字
- Java 多线程(六) synchronized关键字详解(牛叉)
- Java 多线程:synchronized 多线程同步关键字
- 最全面的Java多线程用法解析