Java的类锁和对象锁
来源:互联网 发布:淘宝哪里有卖高仿手表 编辑:程序博客网 时间:2024/05/16 01:20
类锁和对象锁不是同1个东西,一个是类的Class(对应的唯一的一个即这类的二进制字节码)对象的锁,1个是类的实例(!即new出的一个类的对象,一个类会有多个实例对象)的锁。也就是说:1个线程访问静态synchronized的时候,允许另一个线程访问对象的实例synchronized方法。反过来也是成立的,因为他们需要的锁是不同的。
对象锁:Java的所有对象(即new出的一个类的对象,一个类会有多个实例对象)都含有1个互斥锁,这个锁由JVM自动获取和释放。线程进入synchronized方法的时候获取该对象的锁,当然如果已经有线程获取了这个对象的锁,那么当前线程会等待;synchronized方法正常返回或者抛异常而终止,JVM会自动释放对象锁。这里也体现了用synchronized来加锁的1个好处,方法抛异常的时候,锁仍然可以由JVM来自动释放。
类锁:对象锁是用来控制实例方法之间的同步,类锁是用来控制静态方法(或静态变量互斥体)之间的同步。其实类锁只是一个概念上的东西,并不是真实存在的,它只是用来帮助我们理解锁定实例方法和静态方法的区别的。我们都知道,java类可能会有很多个对象,但是只有1个Class对象,也就是说类的不同实例之间共享该类的Class对象。Class对象其实也仅仅是1个java对象,只不过有点特殊而已。由于每个java对象都有1个互斥锁,而类的静态方法是需要Class对象。所以所谓的类锁,不过是Class对象的锁而已。获取类的Class对象有好几种,最简单的就是MyClass.class的方式。
对象锁和类锁的测试
可以看出,类锁和对象锁不是同1个东西,一个是类的Class对象的锁,1个是类的实例的锁。也就是说:1个线程访问静态synchronized的时候,允许另一个线程访问对象的实例synchronized方法。反过来也是成立的,因为他们需要的锁是不同的。
阅读全文
0 0
- java的对象锁和对象传递
- Java的类锁和对象锁
- Java的类锁和对象锁
- java 对象锁和类锁的区别
- Java类和对象,对象的创建
- java的类和对象
- java的类和对象
- Java的类和对象
- Java的类和对象
- java的类和对象
- Java的类和对象
- Java的类和对象
- java的类和对象
- java的类和对象
- JAVA的类和对象
- Java类锁和对象锁实践
- Java类锁和对象锁
- Java类锁和对象锁实践
- vue双向绑定
- Linux查看某个库是否安装
- Node博客项目系列(二)项目创建,安装初始化,请求的实现
- Caffe中的损失函数
- 用redis实现秒杀
- Java的类锁和对象锁
- 解决 java “错误:编码GBK 的不可映射字符”
- solr5.5(6)——debugQuery的打分分析
- 使用Jedis操作redis
- 模型融合:bagging、Boosting、Blending、Stacking
- 多表查询(四)
- onload事件和addLoadEvent函数
- 身体脏了要洗澡,牙“脏”了为什么不洗牙?
- is not mapped nhibernate