对象锁&类锁

对象锁

当一个对象中有synchronized method或synchronized block的时候调用此对象的同步方法或进入其同步区域时,就必须先获得对象锁。如果此对象的对象锁已被其他调用者占用,则需要等待此锁被释放

同步静态方法/

静态变量互斥体

由于一个class不论被实例化多少次,其中的

静态方法和静态变量在内存中都只由一份。所以,一旦一个静态的方法被申明为

synchronized。此类所有的

实例化对象在调用此方法,共用同一把锁,我们称之为类锁。一旦一个静态变量被作为synchronized block的mutex。进入此同步区域时,都要先获得此静态变量的对象锁

类锁

由上述同步静态方法引申出一个概念,那就是类锁。其实系统中并不存在什么类锁。当一个同步静态方法被调用时,系统获取的其实就是代表该类的类对象的对象锁

在程序中获取类锁

可以尝试用以下方式获取类锁

synchronized (xxx.class) {…}

synchronized (Class.forName(“xxx”)) {…}

同时获取2类锁

同时获取类锁和对象锁是允许的,并不会产生任何问题,但使用类锁时一定要注意,一旦产生类锁的嵌套获取的话,就会产生

死锁,因为每个class在内存中都只能生成一个Class实例对象。

java 类锁如何获得_Java Synchronized获得类的锁和获得对象的锁有什么区别呢?相关推荐

  1. java monitor是什么意思_Java synchronized关键字和monitor

    最近在看Java并发相关的东西,然后再看文档的时候经常看到monitor这个词,例如Object.wait的文档里有这么一句: The current thread must own this obj ...

  2. java锁方法和锁代码块_java的同步方法和同步代码块,对象锁,类锁区别

    /** * @author admin * @date 2018/1/12 9:48 * 做用在同一个实例对象上讨论 * synchronized同步方法的测试 * 两个线程,一个线程调用synchr ...

  3. java单例设计模式双重_Java 设计模式 ——单例模式(饿汉,懒汉,双重锁,静态内部类)...

    设计模式: 是在大量的实践中总结和理论化之后优选的代码结构,编程风格,以及解决问题的思考方式.设计模式免去我们自己再思考和摸索.就像是经典的棋谱,不同的棋局,我们用不同的棋谱 俗称"套路&q ...

  4. java.lang 源码剖析_java.lang.Void类源码解析

    在一次源码查看ThreadGroup的时候,看到一段代码,为以下: /* * @throws NullPointerException if the parent argument is {@code ...

  5. java数组使用实验报告_JAVA数组与类的定义-java实验报告

    JAVA数组与类的定义-java实验报告 JAVA数组与类的定义-java实验报告 .实验目的与要求 1. 熟悉Java类.对象和方法的一般操作练习等. 2. 熟悉数组等的定义和使用. 二.实验内容及 ...

  6. java枚举类型季节实例_Java之枚举类

    目录 一.为何引入枚举类型(为了替代魔法值) 什么是魔法值?魔法值有哪些隐患,见另一篇文章编码规约之使用Enum枚举类替代魔法值 那么为什么不用静态变量来替换魔法值呢? 有时候,变量的取值只在一个有限 ...

  7. java 打印 日历 详细 注解_Java类库 LocalDate类的简单使用(一)之打印本月的日历...

    Java类库的设计者将保存时间与给时间点命名分开.所以标准Java类库分别包含了两个类:一个是用来表示时间点的Date类:另一个是用来表示日历表示法的LocalDate类.这里简单分析了LocalDa ...

  8. java的setquality值多少_java使用JPEGEncodeParam类的setQuality方法进行高质量图片缩放类(转)...

    java使用JPEGEncodeParam类的setQuality方法进行高质量图片缩放类(转) 找了很多都不理想,最后找个到老外写的,不得不承认老外写的确实牛B 主要是:JPEGImageEncod ...

  9. java中定义类的关键字是_java中定义类的关键字是什么?

    java中定义类的关键字是:"class".在Java中定义一个类,需要使用"class"关键字.一个自定义的类名和一对表示程序体的大括号. 类是 Java 中 ...

最新文章

  1. java中batch基础_详解Spring batch 入门学习教程(附源码)
  2. hdu 1598(最小生成树变形)
  3. 微服务架构下一致性最佳实践
  4. python自带的解释器叫做_python学习
  5. python画一条水平直线(matplotlib)
  6. C语言 局部变量 - C语言零基础入门教程
  7. 重拾Javascript(四) 运动 图片的淡入淡出
  8. python中碰撞的代码_Python…Tkinter碰撞
  9. java反射——构造方法
  10. Android 平台视频播放器demo
  11. Halcon 入门教程
  12. RainMeter学习2
  13. matlab 万能实用的线性曲线拟合方法
  14. Navigator的正确打开方式
  15. (程序详解)51单片机+DS12C887+1602高精度时钟,软件:keil4,Proteus 8
  16. 电子商务系统的运维与评价(十三)
  17. 用powershell安装临时中文输入法
  18. tl-wdr5620虚拟服务器,TP-Link TL-WDR5620路由器怎么设置?
  19. 火车头定制规则php什么意思,javascript - 请教一个火车头采集器可用的纯正规则!...
  20. java和sql网上书店系统_网上书店管理系统(java。SQL Server数据库)

热门文章

  1. O-RAN:致力于ICDT融合,打造开放与智能的无线接入网
  2. Linux的TUN/TAP编程
  3. GitHub#C#:在终端里面显示一个UI窗口(TerminalGfx)
  4. vue ui框架_Vue移动端UI框架指南
  5. mfc多线程编程实例_多线程技术的PLC与PC的通讯方式
  6. linux字符模式分辨率grub2,Deepin 15.8系统Grub菜单分辨率低的原因及解决方案
  7. JAVA中修改顺序表中的元素_在Java中修改列表的每个项目
  8. Blender 2.82 发布,三维动画制作软件
  9. JDK/Java 14 可能带来什么新特性?
  10. 如何在ASP.NET Core中编写自定义日志记录提供程序