Java餓漢式怠け者式の6つの方法
2413 ワード
6つの一般的な形式
1餓漢式:オブジェクトを直接作成し、スレッドセキュリティの問題はありません. 直接実例化餓漢式(簡潔直観) 列挙式(最も簡潔) 静的コードブロック餓漢式(適全複雑インスタンス化) 2怠け者:オブジェクトの作成を遅らせる スレッドが安全ではありません(単一スレッド用) スレッドセキュリティ(マルチスレッド用) 静的内部クラス形式(マルチスレッド用)
餓漢式:
怠け者:
1餓漢式:オブジェクトを直接作成し、スレッドセキュリティの問題はありません. 直接実例化餓漢式(簡潔直観) 列挙式(最も簡潔) 静的コードブロック餓漢式(適全複雑インスタンス化) 2怠け者:オブジェクトの作成を遅らせる スレッドが安全ではありません(単一スレッド用) スレッドセキュリティ(マルチスレッド用) 静的内部クラス形式(マルチスレッド用)
餓漢式:
/*
* : ( )
*1、
*2、 ,
*3、
*4、 , final
*/
public class Singleton1(){
public static final Singleton1 INSTANCE = new Singleton1();
private Singleton1(){
}
}
public static void main(String[] args){
Singleton1 s= Singleton1.INSTANCE;
System.out.println(s);
}
/*
* , 1.5
*
*/
public enum Singleton1(){
INSTANCE
}
public static void main(String[] args){
Singleton1 s= Singleton1.INSTANCE;
System.out.println(s);
}
/*
*
*
*/
public class Singleton1{
public static final Singleton1 INSTANCE;
static{
INSTANCE = new Singleton1();
}
private Singleton1(){
}
}
怠け者:
/*
* ( )
* synchronized
*/
public class Singleton1{
private static Singleton1 instance;
private Singleton1(){
}
public static Singleton1 getInstance(){
if(instance == null){
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
instance = new Singleton1();
}
return instance;
}
}
public static void main(){
Singleton1 s1= Singleton1.getInstance();
}
/*
* ( )
*/
public class Singleton1{
private static Singleton1 instance;
private Singleton1(){
}
public static Singleton1 getInstance(){
if(instance == null){
synchronized(Singleton1.class){
if(instance == null){
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
instance = new Singleton1();
}
}
}
return instance;
}
}
/*
* ( )
* , INSTANCE
* getInstance,
*/
public class Singleton1{
private Singleton1(){
}
private static calss Inner{
private static final Singleton1 INSTANCE = new Singleton1();
}
public static Singleton1 getInstance(){
return Inner.INSTANCE;
}
}