[b]主类:[/b]
[b]测试类[/b]
此上为懒汉模式,但要考虑到线程安全问题,主类应该做如是修改:
通常情况下,我们会认为将synchoronized放在方法上是耗时的,但因为java的无序写入问题,故不能做双重检查锁定。
还有另外一种所谓的[b]饿汉模式[/b],首先new了对象,可以解决同步的问题:
因为即使创建一个无用的对象,也不会有什么问题,故在没有特别需求的情况下,推荐使用饿汉模式。
public class TheKing {
private static TheKing king = null;
private TheKing() {
}
public static TheKing getInstance() {
if (king == null) {
king = new TheKing();
return king;
} else {
return king;
}
}
public void sayName() {
System.out.println(king);
}
}
[b]测试类[/b]
public class Test {
public static void main(String[] args) {
TheKing tk = TheKing.getInstance();
tk.sayName();
TheKing tk1 = TheKing.getInstance();
tk1.sayName();
}
}
此上为懒汉模式,但要考虑到线程安全问题,主类应该做如是修改:
public class TheKing {
private static TheKing king = null;
private TheKing() {
}
public static synchronized TheKing getInstance() {
if (king == null) {
king = new TheKing();
return king;
} else {
return king;
}
}
public void sayName() {
System.out.println(king);
}
}
通常情况下,我们会认为将synchoronized放在方法上是耗时的,但因为java的无序写入问题,故不能做双重检查锁定。
还有另外一种所谓的[b]饿汉模式[/b],首先new了对象,可以解决同步的问题:
public class TheKing {
private static TheKing king = new TheKing();
private TheKing() {
}
public static TheKing getInstance() {
return king;
}
public void sayName() {
System.out.println(king);
}
}
因为即使创建一个无用的对象,也不会有什么问题,故在没有特别需求的情况下,推荐使用饿汉模式。