`
shaomeng95
  • 浏览: 222187 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java synchronized内置锁的可重入性

 
阅读更多

 

《java并发编程实践》一书中,关于synchronized内置锁的可重入的例子如下:

------------------------------------------------------------------------------------------------------

public class Widget {

    public synchronized void doSomething() {

        ...

    }

}

 

public class LoggingWidget extends Widget {

    public synchronized void doSomething() {

        System.out.println(toString() + ": calling doSomething");

        super.doSomething();//若内置锁是不可重入的,则发生死锁

    }

}

-------------------------------------------------------------------------------------------------------

小弟在此次有两点疑惑:

1、LoggingWidget 的对象调用doSomething方法时,锁对象为LoggingWidget对象

     super.doSomething()调用是锁对象是谁?LoggingWidget对象 还是 Widget 的Class对象?

 

     运行程序,查看thread dump发现:调用super.doSomething()时锁对象依然是LoggingWidget对象

 

     "线程#1" prio=6 tid=0x0bd60400 nid=0x16f8 waiting on condition [0x0bf8f000..0x0bf8fd68]

   java.lang.Thread.State: TIMED_WAITING (sleeping)

at java.lang.Thread.sleep(Native Method)

at Widget.doSomething(Widget.java:4)

- locked <0x03fbc150> (a LoggingWidget)

at LoggingWidget.doSomething(LoggingWidget.java:5)

- locked <0x03fbc150> (a LoggingWidget)

at LoggingWidget$1.run(LoggingWidget.java:15)

 

   Locked ownable synchronizers:

- None

 

2、在网上搜索发现,大伙都如是说:

 


请大家讨论一下,在子类调用父类方法时,是否同时获取父类的锁(父类的class对象?)
分享到:
评论

相关推荐

    [JAVA][synchronized的使用]

    - **ReentrantLock**:是Java并发包`java.util.concurrent.locks`中的可重入锁,提供了比`synchronized`更细粒度的控制,支持公平锁和非公平锁,以及可中断和可定时的获取锁。 7. **TestSynchronized 示例** 通常...

    java的lock和synchronized的区别.docx

    Java 中的 Lock 和 Synchronized 的区别 Java 语言中有很多相似关键字或相似意义的字,...lock 提供了更加灵活和高效的锁机制,可以满足不同场景下的需求,而 synchronized 则是 Java 中的关键字,具有语言的内置性。

    深入理解java内置锁(synchronized)和显式锁(ReentrantLock)

    深入理解Java内置锁(synchronized)和显式锁(ReentrantLock) Java中有两种锁机制:内置锁(synchronized)和显式锁(ReentrantLock)。内置锁是Java语言提供的一种同步机制,使用synchronized关键字声明的方法或...

    java中的锁

    2. ReentrantLock(可重入锁):实现了Lock接口,是Java中唯一可重入的互斥锁,与内置锁有类似的语义,但功能更强大。 ```java import java.util.concurrent.locks.Lock; import java.util.concurrent.locks....

    Java多线程高并发篇(一)--重入锁

    在Java多线程高并发编程中,重入锁(ReentrantLock)是一个至关重要的概念,它提供了比Java内置锁(synchronized)更细粒度的控制,并且具有更高的可读性和可扩展性。本篇文章将深入探讨重入锁的相关知识点。 首先...

    Synchronized_锁升级知识点总结

    Java作为一种广泛使用的编程语言,其提供了内置的同步机制来实现锁的功能,其中"Synchronized"关键字是最为常用的方式之一。在Java高并发编程领域,理解Synchronized锁的升级机制是非常重要的。 首先需要知道的是,...

    javasynchronized详解.pdf

    - 示例2则演示了即使一个线程在一个`synchronized(this)`块中,其他线程仍可访问同一对象上的非`synchronized(this)`代码块,因为这些代码块没有受到当前对象锁的保护。 5. **锁的粒度**: - `synchronized`...

    java基本教程之synchronized关键字java多

    每个Java对象都可以作为锁,`synchronized`关键字实际上是在获取和释放对象的监视器锁(也称为内置锁或互斥锁)。对于非静态方法,锁是当前对象;对于静态方法,锁是对应的类的Class对象。 三、synchronized的两种...

    Java 同步锁 wait notify 学习心得

    Java允许在一个`synchronized`代码块内再嵌套另一个`synchronized`代码块,即使它们使用相同的锁对象。这种情况下,锁会被多次获取,相应的,也需要多次释放才能完全释放锁。嵌套锁通常用于更复杂的线程间协调逻辑,...

    简单聊聊Synchronized和ReentrantLock锁.docx

    相比之下,ReentrantLock(可重入锁)是Java并发包java.util.concurrent.locks中的一个类,提供了更细粒度的锁控制。ReentrantLock允许显式获取和释放锁,并且支持更丰富的锁原语,如公平锁、非公平锁、可中断锁、...

    Java锁机制详解.pdf

    Java锁机制的发展历经了多个版本的改进,尤其是Java 5.0引入的显示锁(Explicit Locks),提供了一系列比内置锁(synchronized)更灵活的同步手段。 在Java中,内置锁是通过synchronized关键字实现的,而显示锁则是...

    【Java】synchronized同步锁详解

    Java 中的同步机制主要用于解决多线程环境下的数据安全问题,其中synchronized关键字是Java提供的一种内置锁,也称为监视器锁或悲观锁。synchronized可以确保在同一时刻,只有一个线程能执行特定的代码块,从而保证...

    Java锁之可重入锁介绍

    无论是内置的 `synchronized` 还是 `java.util.concurrent.locks.ReentrantLock`,都通过可重入性确保了在复杂多线程环境下的正确性和可靠性。在实际编程中,理解并熟练掌握可重入锁的原理和使用方法,对优化并发...

    深入java并发编程,使用ReentrantLock和 Synchronized加锁

    2. **可重入性**:synchronized也支持可重入,即一个线程已经获得了锁,可以再次进入持有该锁的代码块,这对于递归调用是必要的。 3. **内存可见性**:synchronized能确保线程之间的内存可见性,即当一个线程修改了...

    java锁的释放与建立

    在Java多线程编程中,锁机制是保证线程安全和数据一致性的重要工具。本篇文章将深入探讨Java锁的释放与建立,以及它们之间的_happens-before_关系,旨在帮助开发者更好地理解和应用并发控制。 首先,Java中的锁主要...

    27道顶尖的Java多线程、锁、内存模型面试题!.pdf

    5. **锁的种类**:除了Synchronized,Java还有其他类型的锁,如ReentrantLock(可重入锁,功能与Synchronized类似但更灵活)、Semaphore(信号量,控制同时访问特定资源的线程数量)和ReadWriteLock(读写锁,允许多...

    java-syn.zip_Java syn_Java syn锁_java同步锁syn_java锁 syn_syn同步事务锁

    `synchronized`关键字是Java中的内置锁机制,它基于Java内存模型(JMM)来确保线程间的可见性和有序性。当一个线程持有对象的锁时,其他线程试图访问该对象的同步代码会阻塞,直到锁被释放。 4. **Java锁的类型**...

    Java多线程之显示锁和内置锁总结详解

    内置锁是Java中通过`synchronized`关键字实现的。当一个线程进入`synchronized`修饰的方法或代码块时,它会自动获取锁,离开时自动释放。这种锁的获取和释放过程对程序员来说是透明的,因此被称为隐式操作。使用内置...

    Java 中15种锁的介绍

    Java的`ReentrantLock`和`synchronized`都是可重入锁。 - **不可重入锁** 如果线程已经在持有锁的情况下尝试再次获取,会导致死锁。例如,上述代码中的自旋锁模拟展示了不可重入锁的实现。 3. **独享锁 / 共享锁**...

Global site tag (gtag.js) - Google Analytics