java – 在现代JVM中双重检查锁定
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在现代JVM中双重检查锁定,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1680字,纯文字阅读大概需要3分钟。
内容图文
![java – 在现代JVM中双重检查锁定](/upload/InfoBanner/zyjiaocheng/808/c8725592870648d0a383c500d2623559.jpg)
我有一个类可能会在初始化期间抛出任何运行时异常.我希望这个类是一个单例,因为在内存中保存多个对象的成本很高.我在另一堂课中使用那门课.
我的用例如下:
>我必须使用Controller的单个实例.
> Parent的每个实例都必须使用相同的Controller实例.
>控制器
构造函数可能会抛出异常.
>如果实例化失败,我应该
一段时间后重试实例化.
因此,当我尝试在Controller上执行“get”时,检查我的Controller实例是否为null,如果是,我尝试再次实例化它.
以下是我的代码:
class Parent
{
private static volatile Controller controller;
private static final Object lock = new Object();
static
{
try
{
controller = new Controller();
}
catch(Exception ex)
{
controller = null;
}
}
private Controller getController() throws ControllerInstantiationException
{
if(controller == null)
{
synchronized(lock)
{
if(controller == null)
{
try
{
controller = new Controller();
}
catch(Exception ex)
{
controller = null;
throw new ControllerInstatntationException(ex);
}
}
}
}
return controller;
}
//other methods that uses getController()
}
我的问题是,这段代码坏了吗?我在某处读到上述代码在JVM 1.4或更早版本中会出现问题.你能提供参考/解决方案吗?请注意,我问这个问题,因为互联网上有很多关于这个主题的混淆.
谢谢.
解决方法:
我相信它没有被打破,导致声明不稳定.但是imho最好避免像这样的代码.无法保证此代码适用于Java 8.还有另一种方法来创建懒惰的单身人士.我总是(差不多)使用这种方法.第一次在Java Concurrency in Practice一书中面对它.
public class Singleton {
private Singleton() { }
private static class SingletonHolder {
public static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
我不知道你在代码中做了什么,很难说,如何调整它.最简单的方法,只需使用synchronize方法.您是否真的希望使用双重检查锁定获得一些性能优势?是否有瓶颈同步方法?
内容总结
以上是互联网集市为您收集整理的java – 在现代JVM中双重检查锁定全部内容,希望文章能够帮你解决java – 在现代JVM中双重检查锁定所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。