用法解释

synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 
1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 
2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 
3. 修饰一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象; 
4. 修饰一个类(Person.class),其作用的范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象。

原因解释

java的对象锁和类锁:java的对象锁和类锁在锁的概念上基本上和内置锁是一致的,但是,两个锁实际是有很大的区别的,对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的class对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个class对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。

对象的内置锁和对象的状态之间是没有内在的关联的,虽然大多数类都将内置锁用做一种有效的加锁机制,但对象的域并不一定通过内置锁来保护。当获取到与对象关联的内置锁时,并不能阻止其他线程访问该对象,当某个线程获得对象的锁之后,只能阻止其他线程获得同一个锁。之所以每个对象都有一个内置锁,是为了免去显式地创建锁对象。所以synchronized只是一个内置锁的加锁机制,当某个方法加上synchronized关键字后,就表明要获得该内置锁才能执行,并不能阻止其他线程访问不需要获得该内置锁的方法。

转载于:https://www.cnblogs.com/wade-luffy/p/5671516.html

synchronized的理解相关推荐

  1. synchronized 的理解

    第一种:package com.ucmed.zsyy.util; /** * Created by ucmed on 2017/2/8. */ public class DirtyRead { pri ...

  2. synchronized关键字理解

    引入 需求 先看一个简单的需求 我们现在模拟一下银行的叫号机生产号码(号码范围为1~100),假设我们现在有四个取号机,要求每个人取得到号码不重复,并且不能有遗漏,很多人就很快的可以写出下面的代码 代 ...

  3. java synchronized_Java中synchronized关键字理解

    好记性不如烂笔头~~ 并发编程中synchronized关键字的地位很重要,很多人都称它为重量级锁.利用synchronized实现同步的基础:Java中每一个对象都可以作为锁.具体表现为以下三种形式 ...

  4. Java多线程之Synchronized深入理解

    文章目录 1 Synchronized 1.1 引言 1.2 概念理解 1.2.1 不同锁对象 1.2.2 对象锁和类锁概念区别 1.2.3 同步概念monitorenter&monitore ...

  5. java基础-CAS、synchronized和AQS的理解

    乐观锁与悲观锁的区别? 悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程 ...

  6. synchronized与锁升级

    作者:bravo1988 链接:https://www.zhihu.com/question/317687988/answer/1715863550 来源:知乎 著作权归作者所有.商业转载请联系作者获 ...

  7. Java多线程学习十二: synchronized的工作原理 以及背后的“monitor 锁”

    我们研究下 synchronized 背后的 monitor 锁. 获取和释放 monitor 锁的时机 我们都知道,最简单的同步方式就是利用 synchronized 关键字来修饰代码块或者修饰一个 ...

  8. 第十二章:synchronized与锁升级

    相关面试题 锁优化背景 Synchronized 锁性能变化 jdk5 以前 复习:为什么任意一个对象都能成为锁? jdk6 之后 synchronized的种类以及锁升级流程 锁升级流程 无锁 偏向 ...

  9. 青铜4:宝刀屠龙-如何使用synchronized

    在前面的文章<双刃剑-理解多线程带来的安全问题>中,我们提到了多线程情况下存在的线程安全问题.本文将以这个问题为背景,介绍如何通过使用synchronized关键字解这一问题.当然,在青铜 ...

最新文章

  1. python - 定时拍照并发送到qq
  2. linux中操作数据库的使用命令记录
  3. 调用kmeans_聚类分析—KMeans
  4. linux脚本awk,如何在awk脚本中使用shell变量?
  5. eureka hostname作用_springcloud使用Eureka实现服务治理替代dubbo加zookeeper
  6. 炮姐ed计算机谱子,炮姐来了!《科学超电磁炮T》正式PV公开 1月开播_游侠网 Ali213.net...
  7. c语言的编译器还真是不好理解...
  8. python3 字符串编解码和UnicodeDecodeError
  9. 科普:史上最强单片机
  10. 含泪推荐几款超级好用的软件
  11. Java_语法基础_定义规范的接口类型
  12. 新鲜出炉!ECCV2022 107个开源数据集合辑,全球 AI 研究热点一网打尽
  13. Python的Couter使用,计算字符串中每个单词出现的次数
  14. 第一章: HTML、CSS、JavaScript入门篇
  15. python绘制三维地形_三维数字场地模型(上篇):Civil3D 地形的生成
  16. secure CRT设置自动保存日志
  17. cerr与cout的区别
  18. c语言中换行符与回车符的区别,C语言中换行符与回车符的区别
  19. 专利申请费用减免有哪些条件
  20. 2019-06-17问答系统项目落地调研

热门文章

  1. go byte转uint_面试官问我go反射,我怀疑他让我写ORM框架
  2. php linux下保存文件路径怎么写,linux下php导入带图片的word文档转为html,图片保存下来生成路径。...
  3. 使用gluoncv.model_zoo进行目标检测
  4. 在pycharm创建scrapy项目
  5. 安装虚拟机和docker封装
  6. 观察者设计模式 php,PHP设计模式 - 观察者模式
  7. linux在没有x远程桌面,xmanager远程桌面控制linux
  8. python 守护程序检测进程是否存在_python创建守护进程的疑问
  9. android 取色器_音乐剪辑器手机版下载-音乐剪辑器app下载v9.10.15 安卓免费版
  10. springboot通过Intellij指定端口