餓漢式:
//只有內(nèi)部類可以為static器罐。
public class SingIn{
//在自己內(nèi)部定義自己的一個(gè)實(shí)例觉义,只供內(nèi)部調(diào)用
private static final SingIn instance = new SingIn();
private SingIn(){
}
//這里提供了一個(gè)供外部訪問本class的靜態(tài)方法墅诡,可以直接訪問
public static SingIn getInstance(){
return instance;
}
}
懶漢式:
/***
* 一種常用的形式
*/
private static SingIn instance = null;
public static synchronized SingIn getInstance() {
// 這個(gè)方法比上面有所改進(jìn)畴蹭,不用每次都進(jìn)行生成對(duì)象,只是第一次
// 使用時(shí)生成實(shí)例,提高了效率!
if (instance == null)
instance = new SingIn();
return instance;
}
雙重鎖定:(這個(gè)一般在實(shí)際應(yīng)用中用的比較多,以上,了解即可)
//將同步內(nèi)容下方到if內(nèi)部,提高了執(zhí)行的效率热凹,不必每次獲取對(duì)象時(shí)都進(jìn)行同步泵喘,只有第一次才同步,創(chuàng)建了以后就沒必要了般妙。
private static volatile SingIn instance=null;
private SingIn (){
}
public static SingIn getInstance(){
if(instance==null){
synchronized(SingIn .class){
if(instance==null){
instance=new SingIn ();
}
}
}
return instance;
}