java - 并发调用Singleton类的方法

标签 java singleton

我有一个 sinlgeton 对象,它包含一个不同步的方法。单例可以同时被多个客户端访问 - 如果多个客户端访问该对象会发生什么? 实际上我想使用该方法在单个文件中写入日志。

最佳答案

我猜你所说的客户端是指线程。假设您已正确实现单例,则所有线程将使用同一实例。由于这是一种更改状态(写入文件)的方法,因此通常需要某种同步。尽管这取决于某些因素 - 例如,如果您的方法在对 BufferedWriter.write() 的单次调用中仅写入一行,那就没问题。 Because BufferefWriter.write() does synchronization internally 。但是,如果您写入多行或多次调用 BufferedWriter.write(),不同的调用可能会乱序执行。

现在,如果您所说的客户端指的是不同的进程,那么简单的同步当然不会有帮助。您可以使用FileLock如果进程位于同一 JVM 中,则锁定文件。否则,您必须使用外部的东西来锁定,例如使用另一个临时文件作为锁定。尽管它是否提供原子文件创建,但这取决于操作系统。

关于java - 并发调用Singleton类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35006891/

相关文章:

java - 在经过身份验证的用户的 jsp header 中显示用户全名和其他字段

java - this 关键字和 static

java - Java 有静态顺序初始化失败吗?

Java 惰性线程安全单例,使用 Final 字段实现

java - 关于泛型和注释的一些好的 Java 面试问题和答案是什么?

java - 为什么 JavaFX 包含重复的颜色常量?

java - 将 Java Spring 与 Headless/解耦 CMS 结合使用

c++ - Linux 上跨共享库的多个单例实例

design-patterns - 单例有哪些特定的合法用途?

java - 单例方法线程安全