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

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

也有不如预期的,如:

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

接下来看第二个例子:

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

接下来调用一下:

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

简单分析一下:

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

那程序改造一下:

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

比如容易理解,因为没有了同步了之后,那各自可以随意执行了,不受限同步的限制了。

其实这些知识是比较简单的,但是!!是个非常基础也非常重要的点,也就是同步锁只能针对同一个对象而言,而不同的对象是不可能有同步效果的。

Java精通并发-synchronized关键字原理详解的更多相关文章

  1. Java精通并发-Condition编程模式详解与分析

    继续上一次https://www.cnblogs.com/webor2006/p/11890688.html的Condition接口说明进行阅读: 上面这个程序会在之后手动来实现一下,说实话这种写法在 ...

  2. 【转】Java并发的AQS原理详解

    申明:此篇文章转载自:https://juejin.im/post/5c11d6376fb9a049e82b6253写的真的很棒,感谢老钱的分享. 打通 Java 任督二脉 —— 并发数据结构的基石 ...

  3. c# yield关键字原理详解

    c# yield关键字的用法 1.yield实现的功能 yield return: 先看下面的代码,通过yield return实现了类似用foreach遍历数组的功能,说明yield return也 ...

  4. Java并发关键字Volatile 详解

    Java并发关键字Volatile 详解 问题引出: 1.Volatile是什么? 2.Volatile有哪些特性? 3.Volatile每个特性的底层实现原理是什么? 相关内容补充: 缓存一致性协议 ...

  5. java线程总结--synchronized关键字,原理以及相关的锁

    在多线程编程中,synchronized关键字非常常见,当我们需要进行“同步”操作时,我们很多时候需要该该关键字对代码块或者方法进行锁定.被synchronized锁定的代码块,只能同时有一条线程访问 ...

  6. Java网络编程和NIO详解6:Linux epoll实现原理详解

    Java网络编程和NIO详解6:Linux epoll实现原理详解 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO h ...

  7. 【转载】JAVA消息服务JMS规范及原理详解

    转载:https://www.cnblogs.com/molao-doing/articles/6557305.html 作者: moyun- 一.简介 JMS即Java消息服务(Java Messa ...

  8. JAVA消息服务JMS规范及原理详解

    JAVA消息服务JMS规范及原理详解 一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应 ...

  9. java环境配置及原理详解

    java环境配置及原理详解 1.java跨平台的本质 我们谈到java,总是提到跨平台这个词.那么java语言是怎么实现跨平台的呢? 我们编写的java代码不是直接让windows系统读取解析,而是在 ...

随机推荐

  1. 测试从应用到DB的准确的网络延迟

    最近几大云厂商把底层的基础设施包装起来后,通过Ping等很难知道真正的网络延迟了,因为通过ping还没到db都返回了,如何知道从应用到db的真正网络延迟呢? 用我的脚本 #!/bin/bash m= ...

  2. select2的使用

    普通的select不支持搜索,当选项很多的时候,需要一个个下拉查找. 有了select2就方便多了 下载 <https://select2.org/> 引入 <link href=& ...

  3. 【剑指offer】面试题 22. 链表中倒数第 K 个节点

    面试题 22. 链表中倒数第 K 个节点

  4. LeetCode 541. 反转字符串 II(Reverse String II)

    541. 反转字符串 II 541. Reverse String II

  5. 【宁夏区域赛】G.Pot!

    题意: 给定两个操作: MULTIPLY L R x  区间里都乘以一个数x MAX L R : 计算区间内一个2,3,5,7个数最大值. #include<bits/stdc++.h> ...

  6. go 学习笔记(3) 基础结构

    package main import ( "fmt" ) const NAME string = "imooc" var a string = "慕 ...

  7. 解决 WPF 嵌套的子窗口在改变窗口大小的时候闪烁的问题

    原文:解决 WPF 嵌套的子窗口在改变窗口大小的时候闪烁的问题 因为 Win32 的窗口句柄是可以跨进程传递的,所以可以用来实现跨进程 UI.不过,本文不会谈论跨进程 UI 的具体实现,只会提及其实现 ...

  8. emacs手动安装、解决不能使用中文输入法

    emacs的安装 emacs的下载,解压 wget http://mirrors.ustc.edu.cn/gnu/emacs/emacs-25.3.tar.gz tar -zxf emacs-25.3 ...

  9. asBroadcastStream

    StreamSubscription sc = StreamSubscription(); Stream s = Stream(); sc.addStream(s); var bs = sc.stre ...

  10. 基于JMeter的Quick Easy FTP Server性能测试

    FTP性能测试 1.引言 1.1背景说明 本测试选用的是一个小型的FTP服务器软件:Quick Easy FTP Server.Quick Easy FTP Server是一个全中文的FTP服务器软件 ...