Java 内置锁 重入问题
2024-08-31 08:21:50
阅读《Java并发编程实战》,遇到了一个问题
代码如下
/**
* @auther draymonder
*/
public class Widget {
public synchronized void doingSomething() {
System.out.println("fa");
}
}
class LoggingWidget extends Widget {
@Override
public synchronized void doingSomething() {
System.out.println("son");
this.doingSomething1();
super.doingSomething();
}
public synchronized void doingSomething1() {
System.out.println("2333");
}
}
然后书上写 如果内置锁不可重入,那么将会发生死锁。
百思不得其解
其实是很久没写Java了
synchronized
本身如果锁非静态方法的话,其实是锁的对象,那就很显然了
如果这个sync锁是不可重入的,那么 我new LoggingWidget()
然后调用something()
,就会发生子类的这个doingSomething()
方法已经锁住了this 对象
由于不可重入,那么doingSomething1()
和super.doingSomething()
就会发现进入的时候,需要锁this对象,但是此时this对象已经被子类的 something()
给锁住了
因此 doingSomething1()
和super.doingSomething()
就不得不等doingSomething()
方法释放this对象的锁,才能进入
因此就死锁了
最新文章
- android Animation介绍
- mybatis多对一关联
- Asp.net Json数据解析的一种思路
- JAVA类与对象(十)-----抽象类
- 从零开始学习jQuery (九) jQuery工具函数
- (转) html块级元素和内联元素区别详解
- WisDom.Net 框架设计(七) 验证框架
- [Git]更新远程代码到本地仓库
- ASP.NET MVC Controller接收ajax post方式发送过来的json对象或数组数据
- html5 750 REM JS换算方法
- SuperSocket学习笔记(二)
- rman(上)
- Memcache存储大量数据的问题
- thrift之TTransport层的内存缓存传输类TMemoryBuffer
- Open Judge 2750 鸡兔同笼
- Django2.0 正则表示匹配的简单例子
- DDL、DML和DCL的区别与理解
- 固定footer在底部
- aplication.properties配置
- 2个Excel表格核对技巧