getinstance()
方法时会发生什么?getinstance()
同步化
吗?是的,这是必要的。您可以使用以下几种方法通过惰性初始化实现线程安全:
严格的同步:
private static YourObject instance;
public static synchronized YourObject getInstance() {
if (instance == null) {
instance = new YourObject();
}
return instance;
}
这个解决方案要求每个线程都要同步,而实际上只需要前几个线程同步。
private static final Object lock = new Object();
private static volatile YourObject instance;
public static YourObject getInstance() {
YourObject r = instance;
if (r == null) {
synchronized (lock) { // While we were waiting for the lock, another
r = instance; // thread may have instantiated the object.
if (r == null) {
r = new YourObject();
instance = r;
}
}
}
return r;
}
private static class InstanceHolder {
private static final YourObject instance = new YourObject();
}
public static YourObject getInstance() {
return InstanceHolder.instance;
}
synchronize关键字是否需要应用于实现如下单例模式的类的每个方法? 由于Singleton不公开公共构造函数,并且getInstance()方法是同步的,因此不需要同步方法DoA和Singleton类公开的任何其他公共方法。 这个推理正确吗?
问题内容: 用Java编写单例的经典过程是这样的: 并且如果需要在多线程情况下运行,可以添加synced关键字。 但是我更喜欢这样写: 我认为这更简洁,但是奇怪的是我没有看到以这种方式编写的任何示例代码,如果以这种方式编写代码,会不会有不好的效果? 问题答案: 您的代码与“示例代码”之间的区别在于,加载类时将实例化您的单例,而在“示例”版本中,直到实际需要时才实例化它。
本文向大家介绍实例详解java Struts2的配置与简单案例,包括了实例详解java Struts2的配置与简单案例的使用技巧和注意事项,需要的朋友参考一下 Struts2的配置与简单案例: 1. 创建一个dynamic web project(创建时让它自动生成web.xml文件) 2.引入相关jar包 3.在web.xml中进行配置 (启动tomcat服务器之后第一个加载的文件就是web.x
问题内容: 因此,我正在考虑建立一个业余项目,这只是为了完成我的编程/设计。 它基本上是一个多线程的网络蜘蛛,更新了相同的数据结构object-> int。 因此,为此使用数据库绝对是矫kill过正,而我唯一想到的就是用于包含我的数据结构的线程安全单例。http://web.archive.org/web/20121106190537/http://www.ibm.com/developerwor
问题内容: 我有小问题。我学习Java SE并找到ClassLoader类。我尝试在下面的代码中使用它:我试图使用URLClassLoader在运行时动态加载类。 Java虚拟机看不到我的类,并且出现以下异常: 你知道我能解决这个问题吗? 问题答案: 因此,您尝试动态加载类,然后静态引用它。如果您已经可以静态链接到它,则说明已加载并且无法再次加载。您需要通过反射访问方法。 您通常要做的是让加载的类
如果我为各种品牌的汽车建模,我会使用继承层次结构,还是仅仅改变构造函数参数? 关于是使用继承还是仅通过重复使用同一类来关联对象,一般的规则是什么? 对于汽车,我可以做一些像新车(“保时捷”、“991”、“3.8”)这样的事情,或者我可以有一个整体抽象的汽车超类,有像“保时捷”这样的抽象子类制造商,然后可能为保时捷的每个型号都有一个类?