顧名思義,餓漢法就是在第一次引用該類的時候就建立物件例項,而不管實際是否需要建立。**如下:
public
class
singleton
public
static
getsignleton()
}
這樣做的好處是編寫簡單,但是無法做到延遲建立物件。但是我們很多時候都希望物件可以盡可能地延遲載入,從而減小負載,所以就需要下面的懶漢法:
public
class
singleton
public
static
singleton getsingleton()
}
public
class
singleton
public
static
singleton getsingleton()
}
return
singleton;
}
}
public
class
singleton
public
static
singleton getsingleton()
}
}
return
singleton;
}
}
這種寫法被稱為「雙重檢查鎖」,在單例中new的情況非常少,絕大多數都是可以並行的讀操作。因此在加鎖前多進行一次null檢查就可以減少絕大多數的加鎖操作,執行效率提高的目的也就達到了。
那麼,有沒有一種延時載入,並且能保證執行緒安全的簡單寫法呢?我們可以把singleton例項放到乙個靜態內部類中,這樣就避免了靜態例項在singleton類載入的時候就建立物件,並且由於靜態內部類只會被載入一次,所以這種寫法也是執行緒安全的:
public
class
singleton
private
singleton(){}
public
static
singleton getsingleton()
}
但是,上面提到的所有實現方式都有兩個共同的缺點:
當然,還有一種更加優雅的方法來實現單例模式,那就是列舉寫法:
public
enum
singleton
public
void
setname(string name)
}
使用列舉除了執行緒安全和防止反射強行呼叫構造器之外,還提供了自動序列化機制,防止反序列化的時候建立新的物件。
java實現單例模式
1.餓漢式 public class singletonclass private singletonclass 這種方式基於 classloder 機制避免了多執行緒的同步問題,不過,instance 在類裝載時就例項化,雖然導致類裝載的原因有很多種,在單例模式中大多數都是呼叫 getinstan...
實現單例模式(Java)
題目 設計乙個類,我們只能生成該類的乙個例項 說明 只能生成乙個例項的類是實現了singleton 單例模式 的型別。由於設計模式在物件導向程式設計中有著舉足輕重的作用,因此很多公司都會考察。在眾多模式中,singleton模式是唯一乙個能夠用十幾行 完整實現的設計模式,因此此題目很常見 餓漢式單例...
java單例模式的實現
單例在很多地方都用的到,例如購物車之類的,我現在就把單例實現類寫一下供大家交流 我把類的初始話順序說一下,大家就能很快理解了 單個類 1.靜態變數2.靜態初始化塊3.變數4.初始化塊5.構造器 繼承類 1.父類 靜態變數2.父類 靜態初始化塊 3.子類 靜態變數4.子類 靜態初始化塊 5.父類 變數...