Java 以单例模式进行同步

2024-02-01

是否需要将同步关键字应用于像这样实现单例模式的类的每个方法?

public class Singleton {

  private Singleton(){}

  public synchronized static Singleton getInstance()
    {   
        if(instance == null)
            instance = new Singleton ();

        return instance;
    }

  public void DoA(){
  }
}

由于 Singleton 不公开公共构造函数,并且 getInstance() 方法是同步的,因此不需要同步方法 DoA 和 Singleton 类公开的任何其他公共方法。

这个推理正确吗?


就像任何其他课程一样。它可能需要也可能不需要进一步同步。

考虑以下示例:

public class Singleton {

  private Singleton() {}

  public synchronized static Singleton getInstance() { ... }

  private int counter = 0;

  public void addToCounter(int val) {
    counter += val;
  }
}

如果要从多个线程使用该类,addToCounter()有竞争条件。解决这个问题的一种方法是addToCounter()同步:

  public synchronized void addToCounter(int val) {
    count += val;
  }

还有其他方法可以修复竞争条件,例如使用AtomicInteger:

  private final AtomicInteger counter = new AtomicInteger(0);

  public void addToCounter(int val) {
    counter.addAndGet(val);
  }

在这里,我们修复了竞争条件而不使用synchronized.

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

Java 以单例模式进行同步 的相关文章

  • 按键时关闭 ModalWindow

    我希望能够在用户按下某个键 在我的例子中是 ESC 时关闭 ModalWindow 我有一个用于按键的 Javascript 侦听器 它调用取消按钮 ID 的单击事件 jQuery modalWindowInfo closeButtonId
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] 问题

    我正在使用 java 客户端通过 Kerberos 身份验证安全访问 HDFS 我尝试打字klist在服务器上 它显示已经存在的有效票证 我收到的异常是客户端无法通过以下方式进行身份验证 TOKEN KERBEROS 帮助将不胜感激 这是一
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要

随机推荐

  • Sybase SQL 基于具有 ID 的多个列选择不同

    我正在尝试查询 sybase 服务器以获取我们出于测试目的而保存的不同类型数据的示例 我有一张如下所示的表格 摘要 Animals table id type breed name 1 dog german shepard Bernie 2
  • 如何在 Laravel 框架中以最少的时间浪费从数据库中取出一个普通数组中的所有单词?

    我想将数据库中的所有单词放入默认数组 我的数据库里有超过 50 000 个单词 这个数字很可能达到一百万 因此 我希望这个手术不需要花费太多时间 我尝试了这样的方法 其中不将任何单词放入通常的数组中 也就是说 单词被传递到关联数组 word
  • Excel VBA - 查找带有通配符的字符串

    我试图查找包含通配符的字符串 我需要找到该字符串在特定行中出现的位置 该字符串均采用 IP W XX 的形式 其中 XX 是我用来查找值的 2 个字母 是可以是任何随机数的数字通配符 因此 这就是我的查找字符串的样子 FullLookUpS
  • SQLAlchemy - 什么是 declarative_base

    我在学习sqlalchemy 这是我的初始代码 user py from sqlalchemy import Column Integer Sequence String from sqlalchemy ext declarative im
  • 可以在 C++ 中创建单例结构吗?如何?

    当我了解更多关于编码的知识时 我喜欢进行尝试 我有一个程序 在其运行时的生命周期中只需要一个结构的单个实例 并且想知道是否可以创建一个单例结构 我在互联网上看到很多有关创建单例类的信息 但没有看到有关创建单例结构的信息 这可以做到吗 如果是
  • 如何使用C++连接mySQL数据库

    我正在尝试从我的网站连接数据库并使用 C 显示一些行 所以基本上我正在尝试创建一个应用程序 从我的站点数据库的表中执行选择查询 现在 这一定是可能的 因为我已经看到大量的应用程序这样做了 我该怎么做呢 有人可以举个例子并告诉我应该使用哪些库
  • 如何在SQL Server中显示小数点后两位数

    我有一个表 其中有一列float数据类型输入SQL Server我想归还我的float具有 2 位小数的数据类型列值 例如 如果我插入12 3 它应该返回12 30 如果我插入12 它应该返回12 00 select cast your f
  • 使用 strope js 基于 Javascript 的 XMPP 聊天客户端 - 示例和教程? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想制作一个简单的基于 javascript 的 XMPP 客户端 我偶然发现了 strope js
  • MYSQL - 使用联接删除查询

    我已经检查了已回答的问题 但是 解决方案对我不起作用 DELETE FROM TEST2 INNER JOIN TEST1 on TEST1 FIELD2 TEST2 FIELD2 WHERE TEST1 FIELD1 22 当我执行此查询
  • Bash 中循环遍历带有空格的目录

    在 bash 脚本中 我想迭代当前工作目录中的所有目录并对它们执行操作 它们可能包含特殊符号 尤其是空格 我怎样才能做到这一点 我有 for dir in ls l do if d dir 但这会跳过我的名称中带有空格的目录 任何帮助表示赞
  • 通过 AutoMapper 将 IList 映射到 ICollection

    public class Order public int OrderId get set public string OrderCode get set public IList
  • 选择元素上的省略号在 IE9 和 Chrome 中不起作用

    我有一个具有指定宽度的选择列表 文本溢出 省略号仅适用于 Firefox v15 它不适用于 IE7 IE9 和 Chrome IE7 IE 9 和 Chrome 是否支持文本溢出 省略号 如果是的话 我在这里缺少什么 有没有办法获得类似的
  • 当返回对象的函数在没有 return 语句的情况下结束时会发生什么

    在 C 中 当应该返回对象的函数在没有 return 语句的情况下结束时会发生什么 返回什么 e g std string func 返回什么 我们不知道 根据标准 该行为是未定义的 6 6 3 2 返回语句 stmt return htt
  • AVPlayer 在 iOS 10 上无法立即播放视频,而仅播放音频

    我正在使用 AVAssetExportSession 创建视频并在完成后播放视频 但视觉部分没有立即显示 而只有音频立即播放 视觉部分在大约 20 30 秒的延迟后出现 这是我播放视频的代码 void playUrl NSURL vUrl
  • Google应用程序引擎,静态文件的最大数量?

    我正在谷歌应用程序引擎中开发一个应用程序 它将具有用户配置文件类型的功能 我在浏览Google App的在线教程时发现静态文件 应用程序文件和静态文件 的最大数量不应超过3000 我担心当用户数量增加时用户是否能够上传他们的图像 此限制仅适
  • VBScript 将文件上传到 SharePoint DocLib

    我正在尝试自动将文件上传到 SharePoint 文档库 我已经看过无数的帖子 在这个论坛和其他论坛上 但似乎找不到有用的东西 我并不是真正的开发人员 尽管我已经完成了一些简单的 VBA 和 VB 脚本 我正在寻找的是一种自动将文件 特别是
  • JDBC 批量插入、返回 ID

    有没有办法使用 RETURNING INTO 获取受影响行的值 我必须插入相同的行 x 次并获取插入行的 id 该查询如下所示 public static final String QUERY FOR SAVE DECLARE result
  • 在 Python 中划分 2 个列表时如何处理列表推导式中除以零的异常

    在 Python 中划分 2 个列表时 如何处理列表推导式中除以零的异常 从下面的例子来看 from operator import truediv result list map truediv i for i in list1 j fo
  • 有哪些优秀的高级管理 EC2 工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java 以单例模式进行同步

    是否需要将同步关键字应用于像这样实现单例模式的类的每个方法 public class Singleton private Singleton public synchronized static Singleton getInstance