首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我不能在子类中直接使用可重入类的getOwner()方法?

在Java中,可重入类是指一个类实现了ReentrantLock接口或synchronized关键字来实现线程同步。可重入类允许同一个线程多次获取锁,并且在释放锁之前必须释放相同次数的锁。

在子类中不能直接使用可重入类的getOwner()方法的原因是,getOwner()方法是可重入类的私有方法,只能在可重入类内部访问。子类无法直接访问父类的私有方法,因此无法直接调用getOwner()方法。

如果子类需要获取可重入类的拥有者信息,可以通过提供公共的访问方法或者通过继承父类的方法来间接获取。例如,可重入类可以提供一个公共的getOwnerInfo()方法,子类可以通过调用该方法来获取拥有者信息。

另外,子类也可以通过重写可重入类的getOwner()方法来间接获取拥有者信息。子类可以在重写方法中调用父类的getOwner()方法,并在子类中返回获取到的拥有者信息。

需要注意的是,子类在重写可重入类的方法时,应该遵循可重入类的设计原则和逻辑,确保线程同步的正确性和一致性。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(Mobile):https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(Blockchain):https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于 java set,get方法,而为什么推荐直接使用public

不知道有没有人遇到过,有一段时间,都觉得那些 set,get用处何在,直接写一个public直接拿不就行了,多爽,但是随着使用频繁,越来越想去搜索一下这个问题,而不是按照官方推荐,前辈们使用都是建议...这里引入其中一句话: 在任何相互关系,具有关系所涉及各方都遵守边界是十分重要事情,当创建一个库时,就建立了与客户端程序员之间关系,他们同样也是程序员,但是他们是使用库来构建应用...如果所有的成员对任何人都是可用,那么客户端程序员就可以对做任何事情,而不受约束。即使你希望客户端程序员不要直接操作你某些成员,但是如果没有任何访问控制,将无法阻止此事发生。...综上所述,写到这里,诞生了一个想法,其实set ,get ,public,对于它们使用完全取决于我们程序员自己,为了让项目之间逻辑更加清晰,有些标准自上而下,慢慢传了下来,无论你使用那种,但是有一个东西是无法避免...补充说明,set字面意思设置,get获取,我们了解一下java面向对象编程封闭性与安全性,private 修饰set get方法方法封闭在了一个特定,其他就无法对其变量进行方法,这样就提高了数据安全性

1.4K20

readandwritelock_读写锁使用场景

ReadWriteLock接口并添加了重入特性。...当有写线程持有写锁或者有等待写线程时,一个尝试获取公平读锁(非重入线程就会阻塞。这个线程直到等待时间最长写锁获得锁后并释放掉锁后才能获取到读锁。 重入 允许读锁可写锁重入。...Sync分析 Sync中提供了很多方法,但是有两个方法是抽象子类必须实现。...继承AQS都需要使用state变量代表某种资源,ReentrantReadWriteLockstate代表了读锁数量和写锁持有与否,整个结构如下: 可以看到state高16位代表读锁个数...实现如下: protected Thread getOwner() { return sync.getOwner(); } 可以看到直接调用了SyncgetOwner方法,下面是

38910

Java源码之ReentrantLock

在分析重入锁代码之前,我们需要先知道重入锁ReentrantLock分为公平锁和非公平锁(通过构造函数创建不同锁),它内部基于AQS实现抽象Sync同步器(在AQS文章我们谈论过)。...long serialVersionUID = -3000897897090466540L; final void lock() { //不同于非公平锁,这里直接使用...Sync以及公平锁和非公平锁代码我们已经分析过(觉得核心还是要去分析AQS代码,然后才能理解重入锁代码逻辑)。...new FairSync() : new NonfairSync(); } 然后是lock方法 //sync在开始已被定义,何种锁也在构造方法确定,这里直接调用Sync实现lock...,这也说明了为什么nonfairTryAcquire定义在Sync,以及他叫重入锁 public boolean tryLock() { return sync.nonfairTryAcquire

28020

深入理解独占锁ReentrantLock

,都支持重入 ReentrantLock问题分析 【1】ReentrantLock公平锁和非公平锁性能谁更高?   ...TODO 业务逻辑:读写操作不能保证线程安全 } finally { // 解锁,放置在这里原因是保证异常情况都不能干扰到解锁逻辑 lock.unlock(); } 【2】重入尝试...,此方法也会立即返回获取锁成功或失败,公平策略生效 if (!...; } //为子类留下加锁逻辑抽象方法 abstract boolean initialTryLock(); //核心加锁逻辑里面便是使用抽象方法进行加锁...Sync 非公平锁 NonfairSync部分 //与公平同步器进行比较的话,会发现,他们本质没什么区别,因为大多数走都是抽象方法逻辑和AQS方法 //最大区别在于加锁方式不同,公平方式

33640

多线程基础(十五):ReentrantLock源码分析

1.结构及注释 1.1 结构 ReentrentLock是java并发包一个重要同步工具,其设计本身与synhronized作用类似,实现了一个互斥锁。...其产生原因是在java早期,synchronized效率比较低,其阻塞大量使用了系统调用重量级锁0x80,这样导致需要从内核态和用户态切换,从而影响系统效率。...可以看到,ReentrentLock实现了Lock和Serializable接口,其内部有三个,继承了抽象AbstractQueueSynchronizerSync,以及其实现公平和非公平锁子类...1.2 注释 ReentrentLock前面的注释如下: ReentrantLock是一个重入互斥锁,其基本行为和语义与使用Synchronized方法和语句隐式管程锁相同,但是具有更多扩展功能...实现了前面讨论AQS一些模板方法。 ? 3.1 Sync Sync是一个抽象,其定义了一个抽象方法lock,其子类需要实现这个方法

56810

深入理解AQS队列同步器原理-从ReentrantLock非公平独占锁实现来看AQS原理

ReentrantLock简单使用:obj.lock()/obj.unlock()。 设计模式之模板方法:模板是抽象方法,里面存在大量通用方法,差异方法采用抽象方法实现,给具体得子类实现。...使用volatile修饰,解决多线程可见性问题,state在不同子类含义不同,ReentrantLock0表示未加锁,1表示加锁,大于1表示锁重入,state有三个方法修改,分别是get/set...,旧版本直接set,重入在其他地方实现 // 这里获得锁就会执行lock()后面的函数 if (!...: AQS是为其他同步组件提供一个强大基础,希望别人直接拿来使用,也就是希望直接new,而是继承实现,所以定义为抽象。...,用于管理重入线程访问共享资源顺序。

17710

教面试官ReentrantLock源码

1 基本设计 ReentrantLock 重入锁,重入表示同一个线程可以对同一个共享资源重复加锁或释放锁。...具有与使用 synchronized 方法和语句访问隐式监视器锁相同基本行为和语义重入互斥锁,但具有扩展功能。 ReentrantLock 由最后成功锁定但尚未解锁线程所拥有。...尝试超过此限制会导致锁定方法引发错误。 2 架构 ReentrantLock 本身继承 AQS,而是实现了 Lock 接口 ?...Lock 接口定义了各种加锁,释放锁方法,比如 lock() 这种不响应中断获取锁,在ReentrantLock 实现 lock 方法是通过调用自定义同步器 Sync 同名抽象方法,再由两种模式子类具体实现此抽象方法来获取锁...tryAcquire 是在子类实现,但是都需要对trylock 方法进行非公平尝试。

52332

多线程学习指南

说说 sleep() 方法和 wait() 方法区别和共同点? 为什么我们调用 start() 方法时会执行 run() 方法为什么我们不能直接调用 run() 方法?...线程池 为什么要用线程池? 你会使用线程池吗? 如何创建线程池比较好?(推荐使用 ThreadPoolExecutor 构造函数创建线程池) ThreadPoolExecutor 重要参数了解吗?...几种常见线程池了解吗?为什么推荐使用FixedThreadPool? 如何设置线程池大小? …… AQS 简介 原理 AQS 常用组件。...ReentrantLock 和 ReentrantReadWriteLock …… 锁 锁常见分类 重入锁和非重入锁 公平锁与非公平锁 读写锁和排它锁 synchronized 关键字 说一说自己对于...ReadWriteLock StampedLock(JDK8) CAS 介绍 原理 Atomic 原子类 介绍一下 Atomic 原子类; JUC 包子类是哪 4 ?

33720

没有分析过线程池源码 ,谁给你勇气去面试

使用一个无限队列来保存需要执行任务,可以传入线程数量;传入,则默认使用当前计算机可用cpu数量;使用分治法来解决问题,使用fork()和join()来进行调用。...证明它还是一个线程任务。那我们调用t.start()事实上就是调用了该类重写run方法。 Worker为什么使用ReentrantLock来实现呢?...大体思路是一样,这里不做介绍。 Worker为什么使用ReentrantLock来实现呢? tryAcquire方法它是不允许重入,而ReentrantLock是允许重入。...在runWorker方法为什么要在执行任务时候对每个工作线程都加锁呢? shutdown方法与getTask方法存在竞态条件....比较深入问题就是在文中插入问题。 …期望大家能在评论区补充。 End

53530

ReentrantLock 核心源码解析

1 基本设计 ReentrantLock 重入锁,重入表示同一个线程可以对同一个共享资源重复加锁或释放锁。...具有与使用 synchronized 方法和语句访问隐式监视器锁相同基本行为和语义重入互斥锁,但具有扩展功能。 ReentrantLock 由最后成功锁定但尚未解锁线程所拥有。...Sync 同名抽象方法,再由两种模式子类具体实现此抽象方法来获取锁。...失败,即获取锁失败,则进入 AQS 已经定义并实现 Acquire 方法善后 这里 lock 方法并没有直接调用 AQS 提供 acquire 方法,而是先试探地使用 CAS 获取了一下锁,...tryAcquire 是在子类实现,但是都需要对trylock 方法进行非公平尝试。

27800

【Qt】Qt线程(两种QThread详细使用方式)「建议收藏」

大家好,又见面了,是你们朋友全栈君。 Qt提供QThread以进行多任务处理。与多任务处理一样,Qt提供线程可以做到单个线程做不到事情。例如,网络应用程序,可以使用线程处理多种连接器。...重入性与线程安全 重入性:两个以上线程并行访问时,即使按照调用顺序重叠运行代码,也必须保证结果; 线程安全:线程并行运行情况下,虽然保证可以使程序正常运行,但访问静态空间或共享(堆等内存对象)对象时...一个线程安全函数不一定是重入;一个重入函数缺也不一定是线程安全!...重入函数主要用于多任务环境,一个重入函数简单来说就是可以被中断函数,也就是说,可以在这个函数执行任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入函数由于使用了一些系统资源...当线程被终止后,所有等待线程将会被唤醒。 警告:此函数比较危险,鼓励使用。线程可以在代码执行任何点被终止。线程可能在更新数据时被终止,从而没有机会来清理自己,解锁等等。。。

2.6K20

Java多线程——ReentrantLock源码阅读

ReentrantLock,顾名思义重入锁,但什么是重入,这个锁到底是怎样,我们来看看注解说明 ?...ReentrantLock是线程独占,不能与其他线程共享。所谓重入,就是当本线程想再次获得锁,不需要重新申请,它本身就已经锁了,即重入该锁。 为什么会允许锁重入呢?...AQS核心tryAcquire()方法并没有在这里实现,因为子类NonfaiSync和FairSync实现并不一样。但这里同样需要用到nonfairTryAcquire,所以抽象出来了。...上文说到Sync内部类抽象了这个方法出来,说到子类都会用到,说正是tryLock()方法需要用到。 所以显而易见,无论是否公平锁,调用tryLock()都是用非公平锁方法为什么呢?...至于其他成员函数,大都是围绕获取线程和队列状态,没什么特别的,在这里不再赘述,有兴趣可以看看源码。 总结 回顾下要点 ReentrantLock是一个重入锁(被当前占用线程重入)。

52720

多线程基础(十八):ReentrantReadWriteLock源码分析

1.结构及注释 1.1 结构 ReentrantReadWriteLock是基于AQS实现重入读写锁。这个锁在使用时候将锁分为了两个部分,ReadLock和WriteLock。...实际上这两个锁都是共同引用一个AQS对象,共用了一个AQS队列。其与ReentrantLock一样,具有公平/非公平特性,以及重入等功能。其结构如下图所示: ?...此时没也可以理解为什么对于AQS没用将这些需要实现方法定位为抽象方法原因。...在此实现,由于此方法是显式中断点,因此优先于对中断响应而不是正常或可重入锁获取。...需要注意是,step不检查重入获取,它被推迟到完整版本,以避免在更典型不可重入情况下检查和保留计数。

46040

图解设计模式: 有趣工厂模式

工厂模式 Factory Method 在工厂模式子类关系就像是生产工厂模具一样, 由父负责指定实例生成方式 子类来决定生成具体....具体处理全部交给子类负责,目的就是为了将生产实例框架和负责实例生产解耦 示例程序 从下面这段示例来看看工厂模式到底能为我们做些什么。...在工厂模式 我们将编写包分离开来了,一个为framework(框架) 一个为具体实现 这两个包内容是平行 如下图 图 Product角色 这个角色属于框架类型 ,它定义了工厂方法中生成实例所持有的...方法三种实现方式 在工厂包生成产品方法是抽象方法 也就是需要在子类实现这个方法, 创建产品实现方式一般有三种 指定一个抽象方法 实现默认处理 如果自没有实现方法 将会默认处理 在处理其中抛出异常...使用模式与开发小Tips 在日常开发 使用模板方法或者是工厂模式时候,因为要多读多个代码,缕清逻辑变得格外重要,通常在设计模式设计子类时候 需要想维护这些的人员传达明确意图,擅自修改可能会出现事故

31920

分类以及相关讲解

假定这些条件之后,此类其他方法就可以实现所有排队和阻塞机制。 ​...只支持独占模式或者只支持共享模式子类不必定义支持未使用模式方法。...可以根据需要使用用于其同步 机制 AbstractQueuedSynchronizer 将这些方法导出到。 此类序列化只存储维护状态基础原子整数,因此已序列化对象拥有空线程队列。...需要序列化典型子类将定义一个 readObject 方法,该方法在反序列化时将此对象恢复到某个已知初始状态。...一段简单代码 看构造 看之间关系,形成关系图 看使用方法,并逐步理解,边看 代码边看注释 debug 6.深入剖析ReentrantLock源码之公平锁实现 6.1公平锁与非公平锁区别

55140

JDK源码分析-ReentrantLock

先看下 ReentrantLock 签名以及如何使用: public class ReentrantLock implements Lock, java.io.Serializable {} 典型用法...ReentrantLock 默认实现和 synchronized 都是非公平锁。 重入锁:锁是否重入,就是一个线程是否可以多次获取同一个锁,若是,就是重入锁。...Sync (或其子类方法来实现,因此先从 Sync 入手分析,代码如下(部分省略): // 抽象,继承了 AQS abstract static class Sync extends AbstractQueuedSynchronizer...{ // 获取锁方法,由子类实现 abstract void lock(); // 非公平锁 tryLock 方法实现 final boolean nonfairTryAcquire...state 值,若修改成功,则表示成功获取到锁,将 owner 设为当前线程;否则就执行 AQS acquire 方法,具体参考前文「JDK源码分析-AbstractQueuedSynchronizer

22610

Qt高并发

大家好,又见面了,是你们朋友全栈君。 QThread是一个低级(low-level),适合用于显式地构建长期运行线程。...如果一个所有非静态函数都是重入或者是线程安全,那么它就是重入或者是线程安全。 一个QObject在它所”属于“或者有关联线程中被创建。其各子对象也必须属于同一线程。...因此,想要在新线程调用槽函数开发者必须使用worker对象方法;新槽函数不应该被直接实现成子类QThread。...一个是否是重入,在Qt参考文档中有标记。通常情况下,任何没有被全局引用或者被其他共享数据引用C++都认为是重入。...由于从那些为Qt图形用户界面支持提供编译低级库上继承局限性,QWidget和它子类都是不可重入。这样造成后果之一就是我们不能在一个来自次线程窗口部件上直接调用函数。

1.4K20

写给Java程序员看多线程学习指南!

说说 sleep() 方法和 wait() 方法区别和共同点? 为什么我们调用 start() 方法时会执行 run() 方法为什么我们不能直接调用 run() 方法?...线程池 为什么要用线程池? 你会使用线程池吗? 如何创建线程池比较好?(推荐使用 ThreadPoolExecutor 构造函数创建线程池) ThreadPoolExecutor 重要参数了解吗?...几种常见线程池了解吗?为什么推荐使用FixedThreadPool? 如何设置线程池大小? ...... AQS 简介 原理 AQS 常用组件。...锁 锁常见分类 重入锁和非重入锁 公平锁与非公平锁 读写锁和排它锁 .........Atomic 原子类: 介绍一下 Atomic 原子类; JUC 包子类是哪 4 ?

1.2K30

Java多线程系列——锁那些事

乐观锁在Java是通过使用无锁编程来实现,最常采用是CAS算法,Java原子类递增操作就通过CAS自旋实现。 ?...非公平锁优点是可以减少唤起线程开销,整体吞吐效率高,因为线程有几率阻塞直接获得锁,CPU不必唤醒所有线程。缺点是处于等待队列线程可能会饿死,或者等很久才会获得锁。 ?...重入锁 VS 非重入重入锁又名递归锁,是指在同一个线程在外层方法获取锁时候,再进入该线程内层方法会自动获取锁(前提锁对象得是同一个对象或者class),不会因为之前已经获取过还没释放而阻塞...2执行..."); } } 在上面的代码两个方法都是被内置锁synchronized修饰,doSomething()方法调用doOthers()方法。...之前我们说过ReentrantLock和synchronized都是重入锁,那么我们通过重入锁ReentrantLock以及非重入锁NonReentrantLock源码来对比分析一下为什么重入锁在重复调用同步资源时会出现死锁

41910

编程界“朋友”和“陌生人”,你区分得开吗?

我们可以说 car.getOwner() ,car 和 owner 是直接朋友。...任何一个对象,如果满足上面的条件之一,就是当前对象“朋友”;否则就是“陌生人”。 把上面条件按照1,2,3,4顺序对应到下面这个。大家一起来看下。...由于亲合度降低,从而提高了复用率和系统扩展性。。 缺点 造成系统不同模块之间通信效率降低,使系统不同模块之间不容易协调等缺点。 直接通信,必然需要通过第三方转发方式。...这就直接导致了系统存在大量中介,大大增加了系统复杂度。...这也是行家们归纳总结。大家在使用时候,适时注意就好。个人建议太硬性要求(仅仅是个人建议)。

10030
领券