Java Synchronized获得类的锁和获得对象的锁有什么区别呢?
来源:互联网 发布:音乐在线剪切软件 编辑:程序博客网 时间:2024/05/16 06:35
对象锁&类锁
对象锁
当一个对象中有synchronized method或synchronized block的时候调用此对象的同步方法或进入其同步区域时,就必须先获得对象锁。如果此对象的对象锁已被其他调用者占用,则需要等待此锁被释放
同步静态方法/静态变量互斥体
由于一个class不论被实例化多少次,其中的静态方法和静态变量在内存中都只由一份。所以,一旦一个静态的方法被申明为synchronized。此类所有的实例化对象在调用此方法,共用同一把锁,我们称之为类锁。一旦一个静态变量被作为synchronized block的mutex。进入此同步区域时,都要先获得此静态变量的对象锁
类锁
由上述同步静态方法引申出一个概念,那就是类锁。其实系统中并不存在什么类锁。当一个同步静态方法被调用时,系统获取的其实就是代表该类的类对象的对象锁
在程序中获取类锁
可以尝试用以下方式获取类锁
synchronized (xxx.class) {...}
synchronized (Class.forName("xxx")) {...}
同时获取2类锁
同时获取类锁和对象锁是允许的,并不会产生任何问题,但使用类锁时一定要注意,一旦产生类锁的嵌套获取的话,就会产生死锁,因为每个class在内存中都只能生成一个Class实例对象。
对象锁
当一个对象中有synchronized method或synchronized block的时候调用此对象的同步方法或进入其同步区域时,就必须先获得对象锁。如果此对象的对象锁已被其他调用者占用,则需要等待此锁被释放
同步静态方法/静态变量互斥体
由于一个class不论被实例化多少次,其中的静态方法和静态变量在内存中都只由一份。所以,一旦一个静态的方法被申明为synchronized。此类所有的实例化对象在调用此方法,共用同一把锁,我们称之为类锁。一旦一个静态变量被作为synchronized block的mutex。进入此同步区域时,都要先获得此静态变量的对象锁
类锁
由上述同步静态方法引申出一个概念,那就是类锁。其实系统中并不存在什么类锁。当一个同步静态方法被调用时,系统获取的其实就是代表该类的类对象的对象锁
在程序中获取类锁
可以尝试用以下方式获取类锁
synchronized (xxx.class) {...}
synchronized (Class.forName("xxx")) {...}
同时获取2类锁
同时获取类锁和对象锁是允许的,并不会产生任何问题,但使用类锁时一定要注意,一旦产生类锁的嵌套获取的话,就会产生死锁,因为每个class在内存中都只能生成一个Class实例对象。
0 0
- Java Synchronized获得类的锁和获得对象的锁有什么区别呢?
- JS 对象和数组的创建使用new和不使用new有什么区别呢?
- Java的synchronized加在方法上或者对象上有什么区别?
- Java的synchronized加在方法上或者对象上有什么区别?
- imagebutton的src和background有什么区别呢?
- 深入理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别
- 透彻理解 Java synchronized 对象锁和类锁的区别
- java的awt和swing有什么不同呢?
- Java 实例说明 获得一个类的类对象有哪些方式?
- java中获得一个类的类对象有哪些方式?
- Java的Class类提供了许多的getDeclaredxxx和getxxx方法,例如getDeclaredMethod和getMethod成对出现,那它们有什么区别呢?
- 有什么比较好也比较好获得的Java Native Compiler
- JAVA Synchronized 关键字锁实例和锁CLASS对象的区别
- JAVA Synchronized 关键字锁实例和锁CLASS对象的区别
- SharedPreference对象的获得
- Java多线程总结(二):理解对象锁 & synchronized和Lock的区别
- Java static synchronized 和 synchronized的区别
- java获得内部类对象的方法
- MacBook-Android Studio快捷键
- 53. Maximum Subarray**
- android简单实现轮播图效果
- 12.11
- ZooKeeper学习
- Java Synchronized获得类的锁和获得对象的锁有什么区别呢?
- JSTL和EL
- Xcode8.*的NX特性-调试UI、查看状态机、GPU性能分析
- python高级特性(生成器generator )
- Sac·DreamSpace—圣·梦之域 虚拟世界软件开发记录(二)描述文件
- 数据库____管理表
- Android:资源 id 及资源 id 的动态获取
- 给初来乍到的java学习者一些建议:
- 负载均衡NGINX+redis实现SESSION共享