线程获得对象锁或者类锁------>>>同步

==============================================================

对象锁

当一个对象中有synchronized method或synchronized block的时候调用此对象的同步方法或进入其同步区域时,就必须先获得对象锁。

如果此对象的对象锁已被其他调用者占用,则需要等待此锁被释放

==============================================================

同步静态方法/静态变量互斥体

由于一个class不论被实例化多少次,其中的静态方法和静态变量在内存中都只由一份。所以,一旦一个静态的方法被申明为synchronized。

此类所有的实例化对象在调用此方法,共用同一把锁,我们称之为类锁。

一旦一个静态变量被作为synchronized block的mutex。进入此同步区域时,都要先获得此静态变量的对象锁

==============================================================

类锁

由上述同步静态方法引申出一个概念,那就是类锁。

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

在程序中获取类锁

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

synchronized (xxx.class) {...} 
synchronized (Class.forName("xxx")) {...} 同时获取2类锁

同时获取类锁和对象锁是允许的,并不会产生任何问题,

但使用类锁时一定要注意,一旦产生类锁的嵌套获取的话,就会产生死锁,因为每个class在内存中都只能生成一个Class实例对象

转载于:https://www.cnblogs.com/baoendemao/p/3804724.html

对象锁 区别 类锁相关推荐

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

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

  2. Java锁Synchronized对象锁和类锁区别(搬运)

    java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁.线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁.获得内置锁的唯一途径就是进入这个锁的保 ...

  3. 透彻理解 Java synchronized 对象锁和类锁的区别

    synchronized 加到 static 方法前面是给class 加锁,即类锁:而synchronized 加到非静态方法前面是给对象上锁.这两者的区别我用代码来演示下: 对象锁和类锁是不同的锁, ...

  4. synchronized 对象锁和类锁的区别

    synchronized 对象锁和类锁的区别 synchronized 描述 一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限, 在Java里边就是拿到某个同步对象的 ...

  5. JUC并发编程笔记1__JUC概述、虚假唤醒问题、JUC的生产者和消费者关系、8锁问题(对象锁、类锁区别)

    目录 一.回顾 概念 线程的几个状态 wait和sleep的区别 Synchronized 和 Lock的区别 二.虚假唤醒问题 举例synchronized下的生产者.消费者模式场景 三.JUC下的 ...

  6. synchronized不能锁静态变量_面试官:请说一下对象锁和类锁的区别

    有锁才有自由 生活中不存在绝对的自由,绝对的自由通常对应的无序和混沌,只有在道德.法律.伦理的约束下的相对自由,才能使人感受到自由. 而在多线程编程中,锁是至关重要的,锁就是道德,就是法律约束,没有锁 ...

  7. java基础---对象锁和类锁的区别

    synchronized 加到 static 方法前面是给class 加锁,即类锁:而synchronized 加到非静态方法前面是给对象上锁. 对象锁和类锁是不同的锁,所以多个线程同时执行这2个不同 ...

  8. synchronized对象锁和类锁的区别

    为什么使用synchronized 在多线程中如果多个线程同时访问某一资源,会造成不可预计的结果.关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块. sync ...

  9. Java并发编程-八锁问题带你彻底理解对象锁和类锁

    八锁问题带你理解对象锁和类锁 8锁问题演示 1.标准访问 2.在邮件方法中暂停4秒,请问先打印邮件还是短信 3.新增普通sayHello方法,请问先打印邮件还是hello 4.两部手机,请问先打印邮件 ...

  10. java synchronized 类锁_【java】synchronized对象锁和类锁简介【图文教程】

    平凡也就两个字: 懒和惰; 成功也就两个字: 苦和勤; 优秀也就两个字: 你和我. 跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信 ...

最新文章

  1. 使用selenium和pyquery爬取京东商品列表
  2. mysql hex函数性能_mysql hex与unhex 函数的妙用
  3. 用Opengl实现骨骼系统
  4. 13.4. 临时表是否需要建索引
  5. 系统运维tips 3 之 innodb
  6. 利刃 MVVMLight 2:Model、View、ViewModel结构以及全局视图模型注入器的说明
  7. x86平台堆栈优化问题
  8. 《我的世界》AI大战降临:6000万帧超大数据集已发布,NeurIPS 19向你约战
  9. NET Core-学习笔记(一)
  10. 接口没获取到就被使用_使用CompletableFuture时,那些令人头疼的问题
  11. 手机12306买卧铺下铺技巧_手机12306怎么买下铺
  12. 深度学习识别手写字体数字
  13. python使用gmssl实现SM4算法的OFB模式
  14. 集合和数组区别_了解您的编码基础:集合和数组之间的主要区别
  15. SPSS 检验后显著性识别
  16. 35岁以后你还能干嘛?
  17. 带通滤波器幅频特性曲线图_滤波器知识,你所要的,都在这里
  18. 用Python做游戏有多有趣——这还拿不下你?
  19. 数据中心服务器机柜内的信息点数
  20. [转] WEB前端学习资源清单

热门文章

  1. 银河麒麟双击deb包无法安装
  2. 气是能量的宏观运行的现象描述
  3. SHELL中函数的写法、调用、参数、返回值代码范例
  4. jquery_ajax_js,浅析jQuery Ajax通用js封装
  5. mysql sys exec_mylab_sys_exec UDF调用mysql外部系统命令(For linux)
  6. arraylist输出 java_在java中打印ArrayList时输出不同
  7. php 开启 pathinfo,Nginx + php-fpm 开启 PATH_INFO 模式
  8. python read_csv dtype_Pandas read_csv low_memory和dtype选项
  9. java电话本怎么做_Java写的电话号码本自动化生成器,程序片段
  10. python海龟作图不用循环_10分钟,利用聪明的小海龟可以制作出绚丽的视觉效果,你信不信呢...