Tag: 单例

Java中的单例和multithreading

在multithreading环境中使用Singleton类的首选方法是什么? 假设我有3个线程,并且所有这些线程都试图同时访问singleton类的getInstance()方法 – 如果不保持同步会发生什么? 使用synchronized getInstance()方法或在getInstance()使用synchronized块是一种好习惯。 请告知是否还有其他方法。

Java:getInstance vs Static

Java中getInstance()的目的是什么? 在我的研究过程中,我继续阅读getInstance()有助于实现Singleton设计模式(这意味着整个程序中只有一个实例可供我理解)。 但我不能只使用静态? 这不是静止的全部意义吗? 如果我只是有静态方法和字段,它与使用getInstance()什么不同? 是否存在静态的“范围”? 例如,每个方法或类一个实例? 如果它们不同,在什么情况下我会选择getInstance()不是使用静态? 如果问题不清楚,我很抱歉,我确信我遗漏了一些有关主题的内容,我无法弄明白是什么。 感谢您提供任何建议。

如何获取现有的websocket实例

我正在开发一个使用Websockets(Java EE 7)的应用程序,以异步方式向所有连接的客户端发送消息。 每当创建新文章(我的应用程序中的参与模式)时,服务器(Websocket端点)都应发送这些消息。 每次建立与websocket端点的连接时,我都会将相应的会话添加到列表中,我可以在外部访问该列表。 但我遇到的问题是,当我访问这个创建的websocket端点时,所有客户端都从外部连接(任何其他业务类),我得到了现有的实例(如单例)。 所以,你能否告诉我一个方法,我可以得到一个websocket端点的现有实例,因为我无法创建它作为新的MyWebsocketEndPoint()因为它将由websocket内部机制创建,只要客户端的请求是接收。 对于参考: private static WebSocketEndPoint INSTANCE = null; public static WebSocketEndPoint getInstance() { if(INSTANCE == null) { // Instead of creating a new instance, I need an existing one INSTANCE = new WebSocketEndPoint (); } return INSTANCE; } 提前致谢。

单身和unit testing

Effective Java在unit testing单例上有以下声明 使类成为单例可能会使测试其客户端变得困难,因为除非它实现了作为其类型的接口,否则不可能将模拟实现替换为单例。 任何人都可以解释为什么会这样吗?

HikariCP Wrapper(线程安全)

我正在学习使用HikariCP(我是java的新手),我发现了一个包装器,但我认为它不是线程安全,单例的实例是线程安全,但不是方法getConnection()。 这个课是这样的: public class HikariCPWrapper{ private static final HikariCPWrapper INSTANCE; private HikariDataSource ds; static { INSTANCE = new HikariCPWrapper(); } private HikariCPWrapper(){ HikariConfig config = new HikariConfig(); //config.set… //… ds = new HikariDataSource(config); } public static HikariCPWrapper getInstance () { return INSTANCE; } public Connection getConnection() throws SQLException { return ds.getConnection(); } } 好吧,我需要向HikariConfig或HikariDataSource发送参数,所以我用这种方式重写它: public […]

在Singleton程序中使用和流动静态语句

我知道有很多关于Singleton模式的问题。 但是在这里我想知道关于输出的内容,它也可能涵盖了Java中“静态”的工作方式。 public class Singleton { private static Singleton currentSingleton = new Singleton(); public static Singleton getSingleton() { return currentSingleton; } private Singleton() { System.out.println(“Singleton private constructor…”); } public static void main(String[] args) { System.out.println(“Main method…”); } } 这是运行代码的输出… Singleton私有构造函数… 主要方法…… 当我调试这段代码时,控件首先进入System.out.println(“Singleton private constructor…”)并打印。 (私有静态变量currentSingleton此时仍为null) 然后就行了 private static Singleton currentSingleton = new Singleton(); 然后初始化私有变量。 最后,它进入main()方法并打印。 […]

枚举单例如何运作?

以前不是使用枚举,我会做类似的事情: public static ExampleClass instance; public ExampleClass(){ instance=this; } public static ExampleClass getInstance(){ return instance; } 然后有人告诉我一个枚举单身人士: public enum Example{ INSTANCE; public static Example getInstance(){ return Example.INSTANCE; } 在第一个例子中,我必须实例化对象才能创建实例。 有了枚举,我不需要这样做..至少它出现了。 有人可以解释这背后的原因吗?

我们应该密封单身人士吗? 我们应该首先尝试inheritance单身人士吗?

Singleton课程应该允许生孩子吗? 我们应该密封吗? 优缺点都有什么? 为了能够从Singleton类inheritance,我们必须使构造函数受保护而不是私有。 现在,这在c#中会很好,但是java中受保护的单词给了子类和包类访问构造函数。 这意味着不仅从我们的Singletoninheritance的类可以访问构造函数,而且同一个包中的其他类也可以这样做。 我对这些事实感到有些困惑。 也许我在为太多担心而无所事事? 直到现在,我从来没有必要尝试inheritance单身人士,所以这可能只是一个学术问题! 谢谢

现在更好的Java单例模式?

您知道,自Java 5发布以来,在Java中编写Singleton模式的推荐方法是使用枚举。 public enum Singleton { INSTANCE; } 但是,我不喜欢这个 – 是强制客户端使用Singleton.INSTANCE来访问单例实例。 也许,更好的方法是在普通类中隐藏Singleton,并提供更好的单例设施访问: public class ApplicationSingleton { private static enum Singleton { INSTANCE; private ResourceBundle bundle; private Singleton() { System.out.println(“Singleton instance is created: ” + System.currentTimeMillis()); bundle = ResourceBundle.getBundle(“application”); } private ResourceBundle getResourceBundle() { return bundle; } private String getResourceAsString(String name) { return bundle.getString(name); } }; […]

正确使用同步单身?

因此,我正在考虑建立一个业余爱好项目,一种类似的东西,只是为了了解我的编程/设计。 它基本上是一个multithreading的Web蜘蛛,更新相同的数据结构对象 – > int。 因此,为此使用数据库绝对有点过分了,我唯一能想到的是用于包含我的数据结构的线程安全单例。 http://web.archive.org/web/20121106190537/http://www.ibm.com/developerworks/java/library/j-dcl/index.html 我应该考虑采用不同的方法吗?