《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对象?)
- 大小: 29 KB
分享到:
相关推荐
分布式可重入锁是分布式系统中解决并发控制和同步问题的关键技术之一,特别是在微服务架构中,多个服务可能需要共享同一资源,此时就需要一种机制来确保数据的一致性和正确性。Redis,作为一个高性能的键值存储系统...
Lua是Redis内置的脚本语言,其执行过程是原子性的,可以避免在释放锁时出现竞态条件。以下是一个解锁的lua脚本示例: ```lua -- Lua脚本,原子性解锁 local key = KEYS[1] local value = ARGV[1] if redis.call('...
在Java多线程高并发编程中,重入锁(ReentrantLock)是一个至关重要的概念,它提供了比Java内置锁(synchronized)更细粒度的控制,并且具有更高的可读性和可扩展性。本篇文章将深入探讨重入锁的相关知识点。 首先...
无论是内置的 `synchronized` 还是 `java.util.concurrent.locks.ReentrantLock`,都通过可重入性确保了在复杂多线程环境下的正确性和可靠性。在实际编程中,理解并熟练掌握可重入锁的原理和使用方法,对优化并发...
使用内置锁的优点在于其简洁性,但缺点在于缺乏灵活性。 例如,下面的代码展示了`synchronized`如何在两个线程之间同步对共享资源`list`的操作: ```java synchronized(list) { list.append(); list.count(); } ...
对于 `synchronized`,它的可重入性是内置的,你不需要做任何额外的工作。而在 `ReentrantLock` 类中,可以通过调用 `lock()` 和 `unlock()` 方法来显式控制锁的获取和释放。在示例中,`ReentrantLock` 的使用同样...
2. ReentrantLock(可重入锁):实现了Lock接口,是Java中唯一可重入的互斥锁,与内置锁有类似的语义,但功能更强大。 ```java import java.util.concurrent.locks.Lock; import java.util.concurrent.locks....
显示锁的一个重要接口是Lock,它提供了对锁操作的更细粒度控制,而ReentrantLock是Lock的一个具体实现,它提供了可重入的特性,允许线程多次进入锁定的代码块。 Lock接口主要定义了以下方法: 1. lock():获取锁,...
2. **可重入锁 / 不可重入锁** - **可重入锁** 允许同一个线程多次进入同一锁定区域,不会导致死锁。Java的`ReentrantLock`和`synchronized`都是可重入锁。 - **不可重入锁** 如果线程已经在持有锁的情况下尝试...
但是,内置锁也存在一些局限性,例如无法设置超时时间、无法中断线程等。 显式锁(ReentrantLock)则是为了解决这些灵活需求而生。ReentrantLock提供了可定时、可中断、条件队列等功能。ReentrantLock可以设置超时...
而内置应急电源的智能锁,作为电子政务系统中的一个关键组成部分,它在确保数据安全、保障服务连续性方面发挥着至关重要的作用。 智能锁,顾名思义,是利用智能化技术实现的门禁控制设备,它通常包括密码输入、生物...
2. **可重入锁(ReentrantLock)**:这是Java并发包`java.util.concurrent.locks`中的一个锁,相比内置锁具有更高的灵活性。可重入锁支持公平锁和非公平锁模式,允许锁的持有者再次获取锁(即重入),并且可以实现锁...
《内置手机模组的电门锁的说明分析》 在当今的智能化时代,电子设备的广泛应用使得生活和工作变得更加便捷。电门锁作为安全防护的重要组成部分,已经从传统的机械结构发展到现在的电子控制,其中内置手机模组的电...
3. **可重入性**:可重入性是指一个线程可以重新获取已经持有的锁,这是为了避免死锁而设计的特性。例如,一个线程在持有对象锁的情况下,调用了该对象的另一个synchronized方法,如果锁不支持重入,线程将无法继续...
在 Java 中,锁有多种不同的实现机制,如可重入锁、读写锁、互斥锁、悲观锁、乐观锁、公平锁、锁消除、独享锁、共享锁等。 可重入锁 可重入锁,也叫做递归锁,指的是同一线程外层函数获得锁之后,内层递归函数仍然...
它能够通过电子信号实现锁的开启和关闭,提高了安全性并简化了管理。内置双手机模组的电门锁则更进一步,它集成了两个手机模块,这意味着它具备双重通讯能力,可能是为了增强系统的稳定性和冗余性。 首先,我们要...
可重入锁 ReentrantReadWriteLock.ReadLock ReentrantReadWriteLock.WriteLock 隐式锁(内置锁) Synchronized 问题 死锁 性能 线程活跃与线程饥饿 同步工具类 原子操作类 AtomicInteger等 相当于加上...
内置锁是通过synchronized关键字实现的,它提供了对方法或代码块的独占访问,当一个线程进入一个由synchronized修饰的方法或块时,其他试图进入的线程将被阻塞,直到当前线程完成执行并释放锁。 例如,我们可以使用...
综上所述,内置二维码信息序列的智能锁在电信设备中的应用,不仅提升了设备的安全性,还极大地提高了运维效率,是现代信息技术与传统安防结合的典范。随着物联网技术的不断发展,我们可以期待更多类似创新的应用出现...