Java精通并发-synchronized关键字原理详解
关于synchronized关键字原理其实在当时JVM的学习【https://www.cnblogs.com/webor2006/p/9595300.html】中已经剖析过了,这里从研究并发专题的角度再来审视一下它,毕境对于并发它是非常之重要的,下面先来看一下程序:

然后运行,其结果会不定的,有正常依次按顺序执行直到程序退出的,如下:

也有不如预期的,如:


写这个程序的目的其实并不是说同步的问题,而是关于多线程如果对象中存在一个可修改的变量,对于多线程是可以被共享的,所以上面结果的不稳定心就是由于多个线程可以针对同一个成员变量进行修改所导致,要解决那当然用同步就可以解决,这里就不多说了。
接下来看第二个例子:

然后再来编写两个线程类:

接下来调用一下:

那,到底是先输出的“hello”,还是先输出的"world"呢?其实比较容易看出来,肯定是先输出hello,因为有同步锁机制在里面,如下:

简单分析一下:

而等它执行完之后,线程二的world方法才能得到执行,所以结果就如上面所示了。
那程序改造一下:

很明显同步锁机制不会发挥作用了,所以肯定会先输出world了,如下:

比如容易理解,因为没有了同步了之后,那各自可以随意执行了,不受限同步的限制了。
其实这些知识是比较简单的,但是!!是个非常基础也非常重要的点,也就是同步锁只能针对同一个对象而言,而不同的对象是不可能有同步效果的。
Java精通并发-synchronized关键字原理详解的更多相关文章
- Java精通并发-Condition编程模式详解与分析
继续上一次https://www.cnblogs.com/webor2006/p/11890688.html的Condition接口说明进行阅读: 上面这个程序会在之后手动来实现一下,说实话这种写法在 ...
- 【转】Java并发的AQS原理详解
申明:此篇文章转载自:https://juejin.im/post/5c11d6376fb9a049e82b6253写的真的很棒,感谢老钱的分享. 打通 Java 任督二脉 —— 并发数据结构的基石 ...
- c# yield关键字原理详解
c# yield关键字的用法 1.yield实现的功能 yield return: 先看下面的代码,通过yield return实现了类似用foreach遍历数组的功能,说明yield return也 ...
- Java并发关键字Volatile 详解
Java并发关键字Volatile 详解 问题引出: 1.Volatile是什么? 2.Volatile有哪些特性? 3.Volatile每个特性的底层实现原理是什么? 相关内容补充: 缓存一致性协议 ...
- java线程总结--synchronized关键字,原理以及相关的锁
在多线程编程中,synchronized关键字非常常见,当我们需要进行“同步”操作时,我们很多时候需要该该关键字对代码块或者方法进行锁定.被synchronized锁定的代码块,只能同时有一条线程访问 ...
- Java网络编程和NIO详解6:Linux epoll实现原理详解
Java网络编程和NIO详解6:Linux epoll实现原理详解 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO h ...
- 【转载】JAVA消息服务JMS规范及原理详解
转载:https://www.cnblogs.com/molao-doing/articles/6557305.html 作者: moyun- 一.简介 JMS即Java消息服务(Java Messa ...
- JAVA消息服务JMS规范及原理详解
JAVA消息服务JMS规范及原理详解 一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应 ...
- java环境配置及原理详解
java环境配置及原理详解 1.java跨平台的本质 我们谈到java,总是提到跨平台这个词.那么java语言是怎么实现跨平台的呢? 我们编写的java代码不是直接让windows系统读取解析,而是在 ...
随机推荐
- [LeetCode] 388. Longest Absolute File Path 最长的绝对文件路径
Suppose we abstract our file system by a string in the following manner: The string "dir\n\tsub ...
- [LeetCode] 752. Open the Lock 开锁
You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: '0', '1', '2', '3', ...
- [LeetCode] 803. Bricks Falling When Hit 打击砖块掉落
We have a grid of 1s and 0s; the 1s in a cell represent bricks. A brick will not drop if and only i ...
- python jieba 词云
#!/usr/bin/python # coding:utf-8 # 绘制一个<三体>全集词云 # pip install jieba # pip install matplotlib # ...
- 第5/7Beta冲刺
1.团队成员 成员姓名 成员学号 秦裕航 201731062432(组长) 刘东 201731062227 张旭 201731062129 王伟 201731062214 2.SCRU部分 2.1各成 ...
- 值类型前加ref和out的区别
1.值类型前加ref,在调用前必须先初始化,初始化之后在方法内部直接使用 值类型x前加了ref,方法外的x会随着方法内的x改变而改变,因为此时传的是地址,如下面的例子, x前加了ref所以x = x+ ...
- jvm堆内存模型原理分析及堆内存分析工具jhat和MAT的使用超详细教程
- Failed to transfer file: http://repo.maven.apache.org/maven2/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar
解决办法:maven的配置文件settings.xml中添加mirror地址 <mirror> <id>alimaven</id> < ...
- PKUSC2019题解
$D1T1$:$n$个村庄,第$i$个村庄的人要去第$p_i$个村庄(保证$p_i$为排列),每次可以将相邻两个村庄的人位置交换直到所有人都到达目的地.再给定一个长为$n-1$的排列$a$,表示第$i ...
- 转:Java接口和抽象类
转:http://www.cnblogs.com/dolphin0520/p/3811437.html 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有 ...