0 0

关于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

1个答案 按时间排序 按投票排序

0 0

肯定只有子类LoggingWidget一个对象,所以是LoggingWidget对象的锁。 super.doSomething(); 此时也是LoggingWidget对象。
http://my.oschina.net/leoson/blog/107642

2014年6月04日 09:29

相关推荐

    Java并发编程实战(中文版).7z

    《Java并发编程实战》是Java开发者深入理解和掌握并发编程的一本经典著作。这本书全面地介绍了如何在Java平台上高效、安全地编写多线程程序,帮助读者理解并解决并发编程中的各种挑战。 首先,我们需要理解“并发”...

    JavaSE实战——GUIChat

    JavaSE实战——GUIChat JavaSE(Java Standard Edition)是Java平台的标准版,主要用于桌面应用开发。在这个项目中,我们关注的是使用Java进行GUI(图形用户界面)开发,实现一个聊天应用程序。GUIChat是一个典型的...

    重磅!《Go Web编程实战派从入门到精通》随书源码开源啦,Go语言-Web-goWebActualCombat.zip

    《Go Web编程实战派从入门到精通》是一本专注于Go语言在Web开发领域的专著,其开源的随书源码库名为"Go语言-Web-goWebActualCombat",压缩包内的主要内容是goWebActualCombat-master目录,这代表了一个完整的Go语言...

    Java开发实战经典(名师讲坛)

    Java内置对多线程的支持,使得开发者可以轻松地创建并发应用程序。书中详细讲解了Thread类、Runnable接口,以及同步机制如synchronized关键字、wait()、notify()方法,帮助读者理解并掌握多线程编程。 六、Java ...

    JAVA开发实战经典PPT

    Java是一种面向对象的编程语言,具有平台独立性(Write Once, Run Anywhere)的特点,这得益于它的虚拟机技术——Java虚拟机(JVM)。 2. **Java语法**:内容可能包括变量、数据类型、运算符、流程控制(如if-else...

    黑马程序员入学Java知识——精华总结

    8. **多线程**:Java内置对多线程的支持,通过`Thread`类和`Runnable`接口可以创建并管理线程。理解线程同步和互斥的概念,如`synchronized`关键字和`wait()`, `notify()`方法,有助于编写高效的并发程序。 9. **...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ │ 9.JAVA并发编程之多线程并发同步业务场景与解决方案.wmv │ │ │ ├─10.微服务架构之Spring Cloud Eureka 场景分析与实战 │ │ 10.微服务架构之Spring Cloud Eureka 场景分析与实战.wmv │ │ │ ├─11....

    JAVA 实战能力

    3. 多线程:JAVA内置了对多线程的支持,可以创建和管理多个执行线程,实现并发执行。理解线程同步、互斥锁、条件变量等概念,能够编写出高效并发的程序。 4. 输入/输出:JAVA的I/O流体系结构提供了读写文件、网络...

    课程设计 —— 基于 java swing 的火车购票系统.zip

    本课程设计——“基于Java Swing的火车购票系统”旨在让学生掌握Java编程语言,特别是Java GUI(图形用户界面)开发的核心技术,通过构建一个完整的应用程序来锻炼其实战能力。本文将详细介绍该系统的实现过程,主要...

    张孝祥老师Java基础加强(高新技术PPT课件)ppt

    2. 多线程:Java内置了对多线程的支持,可以实现并发执行,提高程序性能。理解线程同步、锁机制等概念,是解决并发问题的关键。 3. 异常处理:Java的异常处理机制能帮助开发者及时捕获和处理运行时错误,保证程序的...

    java笔记与java核心内容解读

    6. **多线程**:Java内置对多线程的支持,包括Thread类和Runnable接口。理解和掌握线程同步、互斥以及并发控制(如synchronized关键字、wait/notify机制)是提升程序性能的关键。 7. **IO流**:Java的IO流系统用于...

    Java典型模块与实战源程序

    6. **多线程编程**:Java内置了对多线程的支持,通过Thread类和Runnable接口可以创建并管理线程。理解和运用同步机制(如synchronized关键字、Lock接口)来解决并发问题,是编写高效并发程序的关键。 7. **反射机制...

    [Java网络编程(第3版,2004)].(Java.Network.Programming).Elliotte.Rusty.Harold.文字版

    根据提供的文件信息,我们可以推断出这是一本关于Java网络编程的专业书籍——《Java网络编程》第三版(2004年),作者为Elliotte Rusty Harold。本书旨在为读者提供深入理解Java网络编程的基础知识和技术细节。下面...

    编程宝典c语言java书

    《编程宝典C语言Java书》是一本涵盖了两种主流编程语言——C语言和Java的综合教程。这本书旨在帮助读者从基础到进阶掌握这两种语言,从而提升编程技能和解决问题的能力。 C语言,作为计算机科学的基础,是理解操作...

    Java软件开发实战 Java基础与案例开发详解 4-5 增强for循环 共5页.pdf

    ### Java软件开发实战:Java基础与案例开发详解 #### 知识点概览 本教程主要围绕Java的基础知识和实际应用展开,旨在帮助初学者掌握Java编程的核心概念和技术要点,并通过丰富的实例加深理解。以下是对该教程各部分...

    Java代码实战

    Java代码实战是一个涵盖广泛主题的领域,涉及到许多关键知识点,这些知识点构成了Java编程的基础和进阶技巧。在本文中,我们将深入探讨Java编程的核心概念、语法特性、编程实践以及一些高级话题。 首先,Java是一种...

    全新java基础实践教程

    “全新Java基础实践教程”可能还涵盖了线程和并发编程,这是现代多核处理器环境下编写高效程序的关键。Java提供了Thread类和Runnable接口来创建和管理线程,以及synchronized关键字和Lock接口来控制并发访问。 此外...

    Java软件开发实战 Java基础与案例开发详解 12-4 线程的同步 共15页.pdf

    - **对象锁**:Java中的每个对象都有一个内置的锁,也称为监视器锁。当一个线程获得了对象的锁之后,其他线程就不能再获得这个锁,直到原来的线程释放锁为止。 - **锁的获取与释放**:当线程进入同步代码块或方法时...

    Java-In-A-Nutshell-5th-Edition(2)

    - 多线程:Java内置了对多线程的支持,可以创建和管理多个执行线程,实现并发执行。 2. **语法特性** - 泛型:引入泛型可以增强类型安全性,避免在运行时进行类型转换。 - 注解(Annotations):用于提供元数据...

Global site tag (gtag.js) - Google Analytics