【java】單例設計模式——餓漢式和懶漢式、Runtime、Timer
單例設計模式:保證類在記憶體中只有一個物件
一、餓漢式:
1、私有構造方法:外界就不能建立物件
2、建立本類物件
3、對外提供公共的訪問方法
class Singleton {
//1,私有構造方法,其他類不能訪問該構造方法了
private Singleton(){}
//2,建立本類物件
private static Singleton s = new Singleton();
//3,對外提供公共的訪問方法
public static Singleton getInstance() { //獲取例項
return s;
}
}
二、懶漢式:
1、私有構造方法:外界就不能建立物件
2、宣告一個引用
3、對外提供公共的訪問方法,建立物件
特點:
1、開發時不用:不安全,多執行緒時可能會建立多個物件
2、面試時用:單例的延遲載入模式
/*
* 懶漢式,單例的延遲載入模式
*/
/*class Singleton {
//1,私有構造方法,其他類不能訪問該構造方法了
private Singleton(){}
//2,宣告一個引用
private static Singleton s ;
//3,對外提供公共的訪問方法
public static Singleton getInstance() { //獲取例項
if(s == null) {
//執行緒1等待,執行緒2等待
s = new Singleton();
}
return s;
}
}
三、餓漢式和懶漢式的區別
1、餓漢式是空間換時間,一上來就建立物件佔用了空間,但是時間快,懶漢式是時間換空間,上來先宣告一個引用,然後進行判斷浪費了時間
2、在多執行緒訪問時,餓漢式不會建立多個物件,而懶漢式有可能會建立多個物件
四、第三種單例模式
class Singleton {
//1,私有構造方法,其他類不能訪問該構造方法了
private Singleton(){}
//2,宣告一個引用
public static final Singleton s = new Singleton();
}
五、單例模式舉例
1、Runtime類:每個java應用程式都有一個Runtime類例項,使應用程式能夠與其執行的環境相連線。應用程式不能建立自己的Runtime類例項。
可以通過 getRuntimr() 方法返回與當前Java應用程式相關的執行時物件 。
原始碼:
private static Runtime currentRuntime = newRuntime();
public static Runtime getRuntime() {
return currentRuntime;
}
private Runtime() {}
補充:Timer類:一種工具,執行緒用其安排以後在後臺執行緒中執行的任務,可安排任務執行一次,或者定期重複執行。
void schedule(TimerTask task, Date time):安排在制定的時間執行制定的任務。
void schedule(TimerTask task, Date time,long period):重複的固定延遲執行
TimerTask類:由Timer安排為一次執行或重複執行的任務,裡面有run()方法,放置具體執行任務。
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class Demo3_Timer {
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
Timer t = new Timer();
//在指定時間安排指定任務
//第一個引數,是安排的任務,第二個引數是執行的時間,第三個引數是過多長時間再重複執行
t.schedule(new MyTimerTask(), new Date(188, 6, 1, 14, 22, 50),3000);
while(true) {
Thread.sleep(1000);
System.out.println(new Date());
}
}
}
class MyTimerTask extends TimerTask {
@Override
public void run() {
System.out.println("起床背英語單詞");
}
}
相關文章
- 設計模式:單例模式 (關於餓漢式和懶漢式)設計模式單例
- java單例模式懶漢和餓漢Java單例模式
- C#單例—餓漢式和懶漢式C#單例
- scala:分別使用懶漢式和餓漢式實現單例模式單例模式
- 詳談單例、餓漢、和懶漢模式單例模式
- java學習回顧---懶漢式和餓漢式Java
- 懶漢模式和餓漢模式模式
- java設計模式之單例模式你真的會了嗎?(懶漢式篇)Java設計模式單例
- 設計模式:單例模式介紹及8種寫法(餓漢式、懶漢式、Double-Check、靜態內部類、列舉)設計模式單例
- 五種單例模式實現懶漢+餓漢+雙重檢測鎖實現+靜態內部類改進餓漢式+列舉單例模式
- C++之this指標、拷貝構造、賦值構造、單列模式(餓漢模式、懶漢模式)C++指標賦值模式
- 別再用懶漢模式了——從JVM的角度看單例模式模式JVM單例
- 餓漢模式C++模式C++
- Java設計模式【單例模式】Java設計模式單例
- Java設計模式 | 單例模式Java設計模式單例
- Java設計模式——單例模式Java設計模式單例
- Java設計模式–單例模式Java設計模式單例
- Java設計模式-單例模式Java設計模式單例
- Java設計模式--單例模式Java設計模式單例
- 【設計模式】漢堡中的設計模式——策略模式設計模式
- java單例設計模式Java單例設計模式
- Java常用設計模式-單例模式Java設計模式單例
- Java設計模式之單例模式Java設計模式單例
- java設計模式-單例模式SingletonJava設計模式單例
- 設計模式:單例模式的使用和實現(JAVA)設計模式單例Java
- Java設計模式系列之單例設計模式Java設計模式單例
- 淺識JAVA設計模式——單例設計模式Java設計模式單例
- 【設計模式】漢堡中的設計模式——觀察者模式設計模式
- java設計模式其一 單例模式Java設計模式單例
- Java設計模式——單例模式(建立型模式)Java設計模式單例
- 折騰Java設計模式之單例模式Java設計模式單例
- [java設計模式]破解單例設計模式,禁止偷生、超生!Java設計模式單例
- 設計模式(單例模式)設計模式單例
- [設計模式] 單例模式設計模式單例
- 設計模式-單例模式設計模式單例
- 設計模式 —— 單例模式設計模式單例
- 設計模式 單例模式設計模式單例
- 設計模式——單例模式設計模式單例