參考:https://blog.csdn.net/yanbober/article/details/45312675git
模式:根據實例化對象時機不一樣分爲懶漢模式與餓漢模式github
餓漢模式是單例類被加載時候就實例化一個對象交給本身的引用;懶漢模式時在調用取得實例方法的時候纔會實例化對象。安全
1 package yanbober.github.io; 2 //餓漢模式 3 class DBManager { 4 private static DBManager mInstance = new DBManager(); 5 6 private DBManager() {} 7 8 public static DBManager getInstance() { 9 return mInstance; 10 } 11 12 public boolean update() { 13 System.out.println("update dbase success!"); 14 return true; 15 } 16 } 17 18 public class Main { 19 public static void main(String[] args) { 20 DBManager dbManager = DBManager.getInstance(); 21 dbManager.update(); 22 } 23 }
package yanbober.github.io;
//懶漢模式(線程安全高併發低性能)
class DBManager {
privatestatic DBManager mInstance;
privateDBManager() {}
publicstaticsynchronized DBManager getInstance() {
if (null == mInstance) {
mInstance = new DBManager();
}
return mInstance;
}
publicbooleanupdate() {
System.out.println("update dbase success!");
returntrue;
}
}
publicclass Main {publicstaticvoidmain(String[] args) {
DBManager dbManager = DBManager.getInstance();
dbManager.update();
}
}
1 package yanbober.github.io; 2 //懶漢模式(相對比較靠譜模式) 3 class DBManager { 4 private static volatile DBManager mInstance; 5 6 private DBManager() {} 7 8 public static DBManager getInstance() { 9 if (null == mInstance) { 10 synchronized(DBManager.class) { 11 if (null == mInstance) { 12 mInstance = new DBManager(); 13 } 14 } 15 } 16 return mInstance; 17 } 18 19 public boolean update() { 20 System.out.println("update dbase success!"); 21 return true; 22 } 23 } 24 25 public class Main { 26 public static void main(String[] args) { 27 DBManager dbManager = DBManager.getInstance(); 28 dbManager.update(); 29 } 30 }
//餓漢模式 class DBManager { privatestatic DBManager mInstance = new DBManager(); privateDBManager() {} publicstatic DBManager getInstance() { return mInstance; } publicbooleanupdate() { System.out.println("update dbase success!"); returntrue; } } publicclass Main {publicstaticvoidmain(String[] args) { DBManager dbManager = DBManager.getInstance(); dbManager.update(); } }併發