-
关于java内置锁的可重入性——来自《java并发编程实战》0
最近在看《Java并发编程实战》,关于java锁的可重入性,书中有如下代码片段:
public class Widget { public synchronized void doSomething() { ... } } public class LoggingWidget extends Widget { public synchronized void doSomething() { System.out.println(toString() + ": calling doSomething"); super.doSomething(); } }
书中做如下描述:子类改写了父类的synchonized方法,然后调用父类中的方法,此时如果没有重入的锁,那么这段代码将产生死锁。由于Widget 和LoggingWidget 中的doSomengthing方法都是synchonized方法,因此每个doSomengthing方法执行前都会获取Widget 上的锁。然而如果内置锁不是可重入的,那么在调用super.doSomething()时将无法获取Widget 上的锁,因为这个锁已经被持有,从而线程将永远停顿下去,等待一个永远也无法获得的锁。疑问如下:
线程进入LoggingWidget的 doSomething时获取的锁不应该是LoggingWidget对象锁吗?怎会是Widget 上的锁?
super.doSomething()获取的是哪个对象锁?
2012年7月16日 12:04
相关推荐
《Java并发编程实战》是Java开发者深入理解和掌握并发编程的一本经典著作。这本书全面地介绍了如何在Java平台上高效、安全地编写多线程程序,帮助读者理解并解决并发编程中的各种挑战。 首先,我们需要理解“并发”...
JavaSE实战——GUIChat JavaSE(Java Standard Edition)是Java平台的标准版,主要用于桌面应用开发。在这个项目中,我们关注的是使用Java进行GUI(图形用户界面)开发,实现一个聊天应用程序。GUIChat是一个典型的...
《Go Web编程实战派从入门到精通》是一本专注于Go语言在Web开发领域的专著,其开源的随书源码库名为"Go语言-Web-goWebActualCombat",压缩包内的主要内容是goWebActualCombat-master目录,这代表了一个完整的Go语言...
Java内置对多线程的支持,使得开发者可以轻松地创建并发应用程序。书中详细讲解了Thread类、Runnable接口,以及同步机制如synchronized关键字、wait()、notify()方法,帮助读者理解并掌握多线程编程。 六、Java ...
Java是一种面向对象的编程语言,具有平台独立性(Write Once, Run Anywhere)的特点,这得益于它的虚拟机技术——Java虚拟机(JVM)。 2. **Java语法**:内容可能包括变量、数据类型、运算符、流程控制(如if-else...
8. **多线程**:Java内置对多线程的支持,通过`Thread`类和`Runnable`接口可以创建并管理线程。理解线程同步和互斥的概念,如`synchronized`关键字和`wait()`, `notify()`方法,有助于编写高效的并发程序。 9. **...
│ │ 9.JAVA并发编程之多线程并发同步业务场景与解决方案.wmv │ │ │ ├─10.微服务架构之Spring Cloud Eureka 场景分析与实战 │ │ 10.微服务架构之Spring Cloud Eureka 场景分析与实战.wmv │ │ │ ├─11....
3. 多线程:JAVA内置了对多线程的支持,可以创建和管理多个执行线程,实现并发执行。理解线程同步、互斥锁、条件变量等概念,能够编写出高效并发的程序。 4. 输入/输出:JAVA的I/O流体系结构提供了读写文件、网络...
本课程设计——“基于Java Swing的火车购票系统”旨在让学生掌握Java编程语言,特别是Java GUI(图形用户界面)开发的核心技术,通过构建一个完整的应用程序来锻炼其实战能力。本文将详细介绍该系统的实现过程,主要...
2. 多线程:Java内置了对多线程的支持,可以实现并发执行,提高程序性能。理解线程同步、锁机制等概念,是解决并发问题的关键。 3. 异常处理:Java的异常处理机制能帮助开发者及时捕获和处理运行时错误,保证程序的...
6. **多线程**:Java内置对多线程的支持,包括Thread类和Runnable接口。理解和掌握线程同步、互斥以及并发控制(如synchronized关键字、wait/notify机制)是提升程序性能的关键。 7. **IO流**:Java的IO流系统用于...
6. **多线程编程**:Java内置了对多线程的支持,通过Thread类和Runnable接口可以创建并管理线程。理解和运用同步机制(如synchronized关键字、Lock接口)来解决并发问题,是编写高效并发程序的关键。 7. **反射机制...
根据提供的文件信息,我们可以推断出这是一本关于Java网络编程的专业书籍——《Java网络编程》第三版(2004年),作者为Elliotte Rusty Harold。本书旨在为读者提供深入理解Java网络编程的基础知识和技术细节。下面...
《编程宝典C语言Java书》是一本涵盖了两种主流编程语言——C语言和Java的综合教程。这本书旨在帮助读者从基础到进阶掌握这两种语言,从而提升编程技能和解决问题的能力。 C语言,作为计算机科学的基础,是理解操作...
### Java软件开发实战:Java基础与案例开发详解 #### 知识点概览 本教程主要围绕Java的基础知识和实际应用展开,旨在帮助初学者掌握Java编程的核心概念和技术要点,并通过丰富的实例加深理解。以下是对该教程各部分...
Java代码实战是一个涵盖广泛主题的领域,涉及到许多关键知识点,这些知识点构成了Java编程的基础和进阶技巧。在本文中,我们将深入探讨Java编程的核心概念、语法特性、编程实践以及一些高级话题。 首先,Java是一种...
“全新Java基础实践教程”可能还涵盖了线程和并发编程,这是现代多核处理器环境下编写高效程序的关键。Java提供了Thread类和Runnable接口来创建和管理线程,以及synchronized关键字和Lock接口来控制并发访问。 此外...
- **对象锁**:Java中的每个对象都有一个内置的锁,也称为监视器锁。当一个线程获得了对象的锁之后,其他线程就不能再获得这个锁,直到原来的线程释放锁为止。 - **锁的获取与释放**:当线程进入同步代码块或方法时...
- 多线程:Java内置了对多线程的支持,可以创建和管理多个执行线程,实现并发执行。 2. **语法特性** - 泛型:引入泛型可以增强类型安全性,避免在运行时进行类型转换。 - 注解(Annotations):用于提供元数据...