最近在看guava的cache源码, 发现LocalCache.Segment类是继承ReentrantLock.
但是我看Segment只用到了lock,unlock,isHeldByCurrentThread 三个方法,
这三个方法都是public的,就是说如果用依赖的方式,这几个方法都可以调用到的.
又查了一下ReentrantLock 的子类, 发现子类包括有: java.util.concurrent.ConcurrentHashMap.Segment
那么为什么不使用依赖(ReentrantLock lock= new ReentrantLock()), 而是用继承呢??
或者说在什么情况下能体现出继承的好处?
相关推荐
《ReentrantLock源码详解与应用》 ReentrantLock,可重入锁,是Java并发编程中一个重要的锁实现,它提供了比synchronized更高级别的控制能力,包括公平性和非公平性选择。本文将深入探讨ReentrantLock的原理,特别...
在深入ReentrantLock之前,我们首先需要了解Java并发编程的基础,特别是Java内存模型和线程同步机制。 **可重入锁与可重入性** 可重入锁允许同一个线程反复进入它已经拥有的锁所保护的代码段。在Java中,...
3. **锁机制**:Java的`java.util.concurrent.locks`包提供了高级锁机制,如`ReentrantLock`可重入锁,它具有与`synchronized`相似的功能,但提供了更多的灵活性,如公平锁、非公平锁、读写锁等。 4. **并发工具类*...
在一个static方法内部不能直接调用非static方法,因为非static方法依赖于类的实例,而非static方法在没有对象实例的情况下就已经可以执行了。 14. Integer与int的区别? int是基本数据类型,而Integer是int的包装...
`goto`在C和C++中作为控制流关键字使用,但在Java中被保留但未启用。为了实现类似的功能,可以使用`break`或`continue`配合标签来模拟`goto`的行为。 #### 3. 说说&和&&的区别。 - **`&`**:逻辑与操作符,用于按...
- 同步的实现方法:使用`synchronized`关键字、`ReentrantLock`等。 ### 51. 启动一个线程是用run()还是start()? 启动线程应该使用`start()`方法,它会创建一个新的线程并调用`run()`方法。直接调用`run()`方法并...
2. 接口与虚类的区别:Java接口不包含任何实现,仅定义方法签名,这使得接口具有更高的灵活性。一个类可以实现多个接口,但只能继承一个父类(Java不支持多继承)。C++的虚类则允许多继承,提供了类的实现,允许多个...
2. **泛型**:泛型提供了一种在编译时检查类型安全的方法,允许在类、接口和方法中使用类型参数,减少强制类型转换。 3. **枚举**:枚举是Java中的一种特殊类,用于定义一组固定的常量,提高了代码的可读性和安全性...
4. **IO流与NIO**:熟练使用Java的输入输出流进行文件操作,理解流的分类和工作原理。对Java NIO(New IO)有一定的了解,知道它如何提高IO操作的效率。 5. **多线程**:掌握线程的创建和管理,理解同步机制,如...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。面试时,面试官经常通过一系列问题来评估候选人的Java技能和经验。以下是一些常见的Java面试题及其详细解释,帮助你更好地理解和准备Java...
switch是否能作用在byte上,是否能作用在long上,是否能作用在String上? - `switch`支持`byte`类型。 - 不支持`long`类型(直到Java 7引入了`switch`支持`long`)。 - 支持`String`类型(自Java 7起)。 #### 43....
同步实现方法包括使用synchronized关键字,或者使用java.util.concurrent包中的工具,如ReentrantLock等。 51. 启动线程应该使用start()方法而不是run()方法。start()方法会启动一个新的线程,然后调用run()方法。...
- Java中没有传统意义上的`goto`语句,但在某些情况下可以通过使用`break`和`continue`加上标签来模拟`goto`的功能。 **4. 说说&和&&的区别.** - `&` 和 `&&` 都用于逻辑与操作,但`&&`具有短路特性,即如果第一个...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。为了在Java面试中脱颖而出,了解并掌握核心的Java知识至关重要。本“JAVA笔试面试宝典”旨在为准备Java面试的开发者提供详尽的指导,帮助...
线程池的创建与使用?** - **创建:** 使用Executor框架中的ThreadPoolExecutor类。 - **使用:** 提交任务给线程池执行。 **56. 线程安全的集合类?** - **线程安全集合:** Vector、HashTable、ConcurrentHashMap等...
Java提供了多种线程同步机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口(如ReentrantLock)。wait()使线程等待,释放对象锁;sleep()使线程休眠,不释放锁;notify()唤醒一个等待的...
因此,在方法内部对对象进行的任何改变都会反映到原始对象上。 #### 六、HashMap与Map 1. **Map接口**:Map是一个接口,用于表示键值对集合。 2. **HashMap类**:HashMap是Map接口的一个实现类,它允许使用null...
- **平台独立性**:Java代码可以在任何支持Java虚拟机(JVM)的平台上运行,这得益于其编译后的字节码形式。 - **自动内存管理**:Java通过垃圾回收机制自动管理内存,减少了程序员手动管理内存的工作量。 - **安全性*...