一、恶汉式单例模式
<p>package etc.maopaosort;</p><p>public class Singleton {//恶汉式单例
<span style="color:#ff0000;">private</span> Singleton(){<span style="color:#3366ff;">System.out.println("test...恶汉式单例模式create an object"); </span><span style="color:#000000;">}</span>
<span style="color:#ff0000;">private</span> static Singleton s=new Singleton();
<span style="color:#ff0000;">public</span> <span style="color:#ff0000;">static</span> <span style="color:#ff0000;">Singleton</span> getInstance(){//此处不需加互斥锁synchronized,就可以保证多线程中单实例
return s;
}
void sing(){
System.out.println("ehan sing");
}
}</p>
二、懒汉式单例模式
<span style="color:#000000;">package etc.maopaosort;
public class Singleton1 {//懒汉式单例
private Singleton1(){System.out.println("test...懒汉式单例模式create an object");}
private static Singleton1 s;
public <span style="color:#ff0000;">synchronized</span> static Singleton1 getInstance(){//此处必须加互斥锁synchronized,否则在多线程中不是单实例
if(s==null){
s=new Singleton1();
return s;
}
return s;
}
}
</span>
测试类Test代码:
package etc.maopaosort;
public class Test implements Runnable{
Singleton1 s1;
Singleton1 s2;
/**
* @param args
*/
public static void main(String[] args) {
// s2=Singleton1.getInstance();
// System.out.println(s1==s2);
Test t1=new Test();
Test t2=new Test();
Thread t=new Thread(t1);
//Thread t1=new Thread(s1);
t.start();
t2.s2=Singleton1.getInstance();
}
@Override
public void run() {
s1=Singleton1.getInstance();
}
}