为什么抽象方法不能同步?

2024-04-22

我正在读一本来自 CodeRanch 的线程 http://www.coderanch.com/t/455033/java-programmer-SCJP/certification/abstract-synchronized-methods-not-allowed说抽象方法无法同步,因为抽象类无法实例化,这意味着没有对象可以锁定。

这是没有意义的,因为抽象类是子类的定义(契约)。同步方法的抽象定义不需要锁定,子方法需要锁定。所有抽象标题都表明孩子must同步此方法。我的逻辑正确吗?如果没有,有人可以解释为什么我错了吗?


关于无法实例化抽象类的评论是垃圾。鉴于它必须是一个实例方法才能抽象,所以肯定有is可以锁定的参考。抽象类中的具体方法还是可以参考this。然而,这仍然并不意味着抽象类应该能够同步。

方法是否同步是一个实施细节该方法的。未指定同步anywhere作为声明性契约 - 它也不像您可以在接口中同步。

类如何实现它提供的任何线程安全保证取决于它。如果一个抽象类想要mandate一种特定的方法,应该使用模板方法模式:

// I hate synchronizing on "this"
private final Object lock = new Object();

public final void foo() {
    synchronized(lock) {
        fooImpl();
    }
}

protected abstract void fooImpl();

但这本身是相当危险的,因为它实际上是在锁内调用“未知”代码,这会导致死锁等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么抽象方法不能同步? 的相关文章

  • 如何使用 Java 创建多个模式连接?

    我必须使用两个数据库 DB2 Oracle 我在 DB2 数据库中有一个名为NAVID 我想使用 Java 为 Oracle 中的所有表创建相同的架构 public class automateExport static String va
  • 在 Tomcat 上部署 Java Web 项目,无需 WAR 或 EAR

    我有一个 Java Web 项目 Struts Spring 在我的本地主机上完美运行 我必须将其部署在我的网站上 但虚拟主机提供的 Tomcat Manager 界面显示 由于安全原因 它无法上传 WAR 文件 当联系技术支持时 我被告知
  • 以点作为分隔符分割字符串

    我想知道我是否要在一个字符串上分割字符串 正确的方式 我的代码是 String fn filename split return fn 0 我只需要字符串的第一部分 这就是我返回第一项的原因 我问这个是因为我在 API 中注意到 意味着任何
  • 如何在数据库中对 (Java) 枚举进行建模(使用 SQL92)

    您好 我正在使用名为 性别 的列对实体进行建模 在应用程序代码中 性别应该是一个 Java 枚举类型 有 2 个值 男性和女性 知道作为数据类型的枚举不是通用 SQL 语言 92 的一部分 您将如何建模它 数据模型必须是可移植的 以便由多个
  • 在 Android 中绘制一条带有弯曲边缘的线

    I am using canvas drawLine to draw some line in android but the lines are too sharp but i need a curved edges 这里的 1 是我所拥
  • WebLogic 10 中的临时目录

    每当 WL 停止时 它都不会删除其临时目录 即 domains mydomain servers myserver tmp WL TEMP APP DOWNLOADS domains mydomain servers myserver tm
  • 代码编译期间遇到警告消息“使用或覆盖已弃用的 API”

    我编译了我的程序并收到以下错误 我该如何解决呢 Note ClientThreadClients java uses or overrides a deprecated API Note Recompile with Xlint depre
  • BigDecimal 的 JPA @Size 注释

    我该如何使用 SizeMySQL 的注释DECIMAL x y 列 我在用着BigDecimal 但是当我尝试包括 Size max它不起作用 这是我的代码 Size max 7 2 Column name weight private B
  • 带有面板的 Java Swing JToolbar:外观和感觉

    我有一个JToolbar其中包含多个JPanels 需要 因为我希望每个都有特定的边界 不幸的是 外观管理器无法识别JPanels属于工具栏和JButtons因此 渲染器与普通按钮一样 即没有工具栏上的特殊鼠标悬停效果 更换JPanels
  • 如何在Gradle中支持多种语言(Java和Scala)的多个项目?

    我正在尝试将过时的 Ant 构建转换为 Gradle 该项目包含约50个Java子项目和10个Scala子项目 Java 项目仅包含 Java Scala 项目仅包含 Scala 每个项目都是由 Java 和 Scala 构建的 这大大减慢
  • 如何使用 Spring MVC 和 Thymeleaf 添加静态文件

    我的问题是如何添加 CSS 和图像文件等静态文件 以便我可以使用它们 我正在使用 Spring MVC 和 Thymeleaf 我查看了有关此主题的各种帖子 但它们对我没有帮助 所以我才来问 根据这些帖子 我将 CSS 和图像文件放在res
  • Java 中 static 关键字如何工作?

    我正在阅读Java教程 http docs oracle com javase tutorial index html从一开始我就有一个问题static字段或变量上的关键字 作为Java said here http docs oracle
  • 如何获取 Android 中临时文件的文件大小?

    如果我使用 openFileOutput 创建并写入临时文件 写入完成后如何获取文件大小 我希望这可以帮助你 File file new File selectedPath int file size Integer parseInt St
  • 删除 ArrayList 对象问题

    我在处理作业时遇到从 ArrayList 中删除对象的问题 如果我使用 正常 for 循环 它的工作原理如下 public void returnBook String isbn for int i 0 i lt booksBorrowed
  • Hibernate @OneToMany 注释到底是如何工作的?

    我对 Hibernate 还很陌生 我正在通过教程学习它 我在理解到底如何一对多注释作品 所以我有这两个实体类 Student代表一个学生并且Guide代表指导学生的人 因此 每个学生都与一名向导相关联 但一名向导可以跟随多个学生 我想要一
  • 在 netBeans 中运行程序时,字体看起来非常奇怪

    我在我的新 MacBook M1 上设置了 netBeans 和 SceneBuilder 除了运行程序时的字体外 一切正常 它看起来像这样 我不知道为什么 按钮应显示 Click me 标签应显示 Hello 我收到的错误消息是 M rz
  • setKeyListener 将覆盖 setInputType 并更改键盘

    大家好 我在两个设备之间遇到问题 在实践中使用InputType和KeyListener我正在操纵一个EditText让它从数字键盘接收逗号和数字 有关更多背景信息 请检查我之前的question https stackoverflow c
  • 如何将任务添加到 gradle 中的主要“构建”任务

    当我尝试使用以下代码将任务添加到主构建任务时 rootProject tasks getByName build dependsOn mytask 当我跑步时它抱怨gradle w build输出 Where Build file line
  • 设计抽象类时是否应该考虑序列化问题?

    一般来说这个问题来自Eclipse建议在抽象类上添加串行版本UID 由于该类是抽象类 因此该类的实例永远不会存在 因此它们永远不会被序列化 只有派生类才会被序列化 所以我的问题是放置一个安全 SuppressWarnings serial
  • java中的回调是什么[重复]

    这个问题在这里已经有答案了 可能的重复 什么是回调函数 https stackoverflow com questions 824234 what is a callback function 我已经阅读了回调的维基百科定义 但我仍然没有明

随机推荐

  • Android 11 上不再支持发送短信的意图

    当以 Android 11 为目标并使用 Android 11 设备 物理设备或模拟器 时 以下方法不再适用于发送短信 更改目标 SDK 版本或设备 SDK 版本即可使其正常工作 logcat 根本没有说什么 知道为什么它不起作用吗 pri
  • Shopify 应用桥会话令牌在使用 vue.js 和 Axios 时遇到一些问题?

    我在制作 Shopify 应用程序 Vue js 作为前端和 laravel 作为后端时遇到一些问题 我正在使用 app bridge 生成会话令牌 它生成会话令牌正常 并且工作正常 直到重新生成会话令牌 重新生成会话令牌后 它会响应 会话
  • 来自 gluUnProject 的 IllegalArgumentException

    我收到此错误消息 08 30 19 20 17 774 ERROR AndroidRuntime 4681 FATAL EXCEPTION GLThread 9 08 30 19 20 17 774 ERROR AndroidRuntime
  • Swift:以编程方式导航到 ViewController 并传递数据

    我最近开始学习swift 到目前为止还不错 目前 我在尝试在视图控制器之间传递数据时遇到问题 我设法弄清楚如何使用导航控制器以编程方式在两个视图控制器之间导航 唯一的问题是现在我很难弄清楚如何将用户输入的三个字符串 对于 json api
  • 我怎样才能让两个“发展流”(分支?)相互跟踪,同时在特定方面保持不同?

    BRIEF 我想让两个 或更多 开发流 环境相互跟踪 在两个方向上发送彼此之间的更改 而不完全收敛 同时保留某些关键的 本质的差异 细节 一个具体的例子 下面是一个具体的例子 我对我的主目录 glew home 进行版本控制已有 28 年了
  • Angularjs:监听指令中的模型更改

    我试图找出当模型在指令中更新时如何监听 eventEditor directive myAmount function return restrict A link function scope elem attrs scope watch
  • opencv中以下代码行的含义是什么?

    该代码行的含义是什么以及如何将此代码转换为 javacv gray Scalar all 255 这是与此代码行相关的完整代码 Mat src imread in jpg gray cvtColor src gray CV BGR2GRAY
  • 从 iFrame 中卸载/删除内容

    是否有办法卸载已在 iframe 内加载的页面 如果可能的话 我不想将 iframe src 更改为空白页面 我基本上正在寻找可以做这样的事情的东西 frameID attr src 只是该代码似乎没有清除先前加载的页面 有没有 unloa
  • 设置 Let's encrypt with Go - 握手错误

    我正在尝试设置让我们在用 Go 编写的负载均衡器上进行加密 我尝试了自动和手动设置 但总是出错 该域正确指向我们的服务器 Digital Ocean 我什至可以从浏览器打开该网站而不会出现错误 而且 ssl 检查报告该域上没有错误 事实是
  • CSS 动画面临的问题

    我正在尝试创建一个几秒钟后会淡入视图的文本 但我遇到了问题 淡入视图工作正常 但文本在显示后几乎立即消失 其次 我需要这个动画以延迟的方式工作 但是当我设置延迟时 它似乎没有任何区别 早些时候 延迟工作得很好 为什么动画显示后不久就消失了
  • 使用 Spring Security 和 CAS 单点注销

    使用纯 Spring Java 配置 我在让 Spring 和 CAS 执行单点登录时遇到问题 我使用以下配置进行单点登录 我使用一个简单的 JSP 页面对 url 进行表单 POSThttps nginx shane com app lo
  • 线程 1:信号 SIGABRT libc++abi.dylib:以 NSException 类型的未捕获异常终止(lldb)

    我本周开始使用 swift 编程 并尝试在我的应用程序中制作一个简单的导航栏 这不是我第一次遇到这个错误 并且不知道可能缺少什么 如果我没记错的话 我正确地连接了从用户界面到代码的所有内容 但输出显示 libc abi dylib term
  • Chrome 开发者工具 - 浏览器大小?

    我正在使用 Chrome 开发者工具并尝试获取浏览器宽度 以 px 为单位 谷歌最近推出了开发者工具的更新 在这些更新之前 缩放开发者工具时 屏幕高度和宽度通常会出现在网站预览的右上角 但现在无法找出屏幕尺寸 示例如下 现在如何通过 Chr
  • 如何在 CentOS 7 上的 PHP 7.2 上安装 zipArchive?

    我正在尝试在具有最新 WordPress 的 nginx Web 服务器上安装 ziparchive 和 domdocument 为了运行 Avada 主题 我需要在本地 CentOS 7 测试服务器上安装这两个主题 我在过去三天里一直在寻
  • 样式表的条件加载

    我有一个与客户合作的网站 每个客户端都可以有自己的主题 当某个客户端的用户登录时 必须加载公司主题 在 application css scss 中 我为每个公司都有这样一行 import theme x css scss import t
  • 如何获取两个任意变更集之间修改的文件列表?

    我唯一的猜测是这样可怕的事情 files where something has been added hg diff r AA r BB grep cut f1 cut d f2 gt tmp ka files where somethi
  • 在ggplot2中绘制两个面之间的线

    如何在两个面之间绘制多条线 我尝试通过在顶部图表的最小值处绘制点来实现此目的 但它们不在两个方面之间 见下图 到目前为止 这是我的代码 t lt seq 1 1000 y1 lt rexp 1000 y2 lt cumsum y1 z lt
  • Robocopy 将文件复制到远程计算机

    我正在尝试编写一个 robocopy 命令将文件从本地计算机复制到任何一台部署服务器 ROBOCOPY MyService bin release remote computer C services myservice MIR 我收到这个
  • 将 Moment 与 Angular 和 TypeScript 结合使用

    我是 TypeScript 的新手 自从我进行任何认真的 JavaScript 开发以来已经有一段时间了 所以我可能会遗漏一些明显的东西 我正在尝试在带有 TypeScript 的 Angular 1 应用程序中使用 Moment 我正在使
  • 为什么抽象方法不能同步?

    我正在读一本来自 CodeRanch 的线程 http www coderanch com t 455033 java programmer SCJP certification abstract synchronized methods