最简单的java单例源代码:
class Singleton
{
private Singleton()
{
}
public static Singleton instance = null;
public static Singleton getInstance()
{
if(instance == null)
instance = new Singleton();
return instance;
}
public static void main(String args[])
{
Singleton s1, s2;
s1 = Singleton.getInstance();
s2 = Singleton.getInstance();
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
System.out.println(s1);
System.out.println(s2);
}
}
/*
class Singleton
{
private static int count = 0;
private Singleton()
{
}
public static Singleton instance = null;
public static Singleton getInstance()
{
if(instance == null)
instance = new Singleton();
count++;
return instance;
}
public static void display()
{
System.out.println(count);
}
public static void main(String args[])
{
Singleton s1, s2;
s1 = Singleton.getInstance();
s1.display();
s2 = Singleton.getInstance();
s2.display();
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
System.out.println(s1);
System.out.println(s2);
}
}
*/
上述代码对于单线程的程序是不会有问题的,但是如果用于多线程,很可能产生问题。改进方法:
将public static Singleton getInstance()改成public static synchronized Singleton getInstance()