国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java單例模式的五種實現方式 懶漢式 餓漢式 雙重校驗鎖 靜態(tài)變量 靜態(tài)內部類 枚舉實現單例模式等

這篇具有很好參考價值的文章主要介紹了Java單例模式的五種實現方式 懶漢式 餓漢式 雙重校驗鎖 靜態(tài)變量 靜態(tài)內部類 枚舉實現單例模式等。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、什么是單例模式?

Java單例模式是一種設計模式,用于確保一個類只有一個實例,并提供全局訪問點以獲取該實例。它通常用于需要共享資源或控制某些共享狀態(tài)的情況下。

2、實現方式

懶漢式:在類加載的時候就創(chuàng)建對象,要再調用方法時才創(chuàng)建對象,減少內存開銷。
餓漢式:再類加載的時候就實例化對象。

2.1 同步方法調用創(chuàng)建實例(懶漢式)

當剛加載這個類時不會直接初始化person,只有調用getPerson()方法時才會構建唯一實例。

public class Person {
	private static Person person;
	//將構造器私有化,就無法從外部調用構造器構造對象
	private Person(){}
    
    //此時這個synchronized是保證線程安全
	public synchronized static Person getPerson() {
		if (person == null) {
			person = new Person();
		}
		return person;
	}
}

2.1 雙重校驗鎖方式加載對象實例(懶漢式)

用兩個判斷,在第一個判斷不通過時,我們不用同步代碼塊,直接返回結果

public class Person {
	//此時要用volatile用于保證person = new Person()內部指令不排序
	private volatile static Person person;
	//將構造器私有化,就無法從外部調用構造器構造對象
	private Person(){}
 
	public  static Person getPerson() {
		if (person ==null){
			synchronized (Person.class){
				if (person == null){
					person = new Person();
				}
			}
		}
		return person;
	}
}

2.1 靜態(tài)變量加載對象實例(餓漢式)

對象唯一實例會隨著這個類的加載就會被初始化出來,基于 classloader 機制避免了多線程的同步問題,但它再還沒有使用這個對象時就被加載出來,有點浪費內存空間。

public class Person {
	private static Person person = new Person();
	//將構造器私有化,就無法從外部調用構造器構造對象
	private Person(){}
 
	public  static Person getPerson() {
		return person;
	}
}

2.1 靜態(tài)內部類實現單例模式(懶漢式)

這里用到了一個知識點,就是內部類不會隨著外部類的加載而加載,而是再第一次使用到內部類后再加載初始化內部類。這樣的機制實現了懶漢模式。我們使用了final修飾,也將其確定為單例模式。

public class Person {
	private static class PersonHolder {
		private static final Person INSTANCE = new Person();
	}
//將構造器私有化,就無法從外部調用構造器構造對象
	private Person (){}
	public static final Person getInstance() {
		return PersonHolder.INSTANCE;
	}
}

2.1 枚舉實現單例模式(餓漢式)

這是實現單例模式的最佳方法。它更簡潔,自動支持序列化機制,絕對防止多次實例化。這是實現單例模式的最佳方法。它更簡潔,自動支持序列化機制,絕對防止多次實例化。

public enum Singleton {  
    INSTANCE;  
    public void whateverMethod() {  
    }  
}

完整的枚舉單例文章來源地址http://www.zghlxwxcb.cn/news/detail-859993.html


public class User {
    //私有化構造函數
    private User(){ }
 
    //定義一個靜態(tài)枚舉類
    static enum SingletonEnum{
        //創(chuàng)建一個枚舉對象,該對象天生為單例
        INSTANCE;
        private User user;
        //私有化枚舉的構造函數
        private SingletonEnum(){
            user=new User();
        }
        public User getInstnce(){
            return user;
        }
    }
 
    //對外暴露一個獲取User對象的靜態(tài)方法
    public static User getInstance(){
        return SingletonEnum.INSTANCE.getInstnce();
    }
}

public class Test {
    public static void main(String [] args){
        System.out.println(User.getInstance());
        System.out.println(User.getInstance());
        System.out.println(User.getInstance()==User.getInstance());
    }
}
結果為true

到了這里,關于Java單例模式的五種實現方式 懶漢式 餓漢式 雙重校驗鎖 靜態(tài)變量 靜態(tài)內部類 枚舉實現單例模式等的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 單例設計模式精講(餓漢式和懶漢式實現的重要方法)

    目錄 什么叫做單例模式? 餓漢式和懶漢式的區(qū)別? 餓漢式-方式1(靜態(tài)變量方式) 餓漢式-方式2(靜態(tài)代碼塊方式) 懶漢式-方式1(線程不安全) 懶漢式-方式2(線程安全) 懶漢式-方式3(雙重檢查鎖) 懶漢式-方式4(靜態(tài)內部類方式) 什么叫做單例模式? ????????涉

    2024年02月12日
    瀏覽(16)
  • 【Java|多線程與高并發(fā)】設計模式-單例模式(餓漢式,懶漢式和靜態(tài)內部類)

    【Java|多線程與高并發(fā)】設計模式-單例模式(餓漢式,懶漢式和靜態(tài)內部類)

    設計模式是一種在軟件開發(fā)中常用的解決復雜問題的方法論。它提供了一套經過驗證的解決方案,用于解決特定類型問題的設計和實現。設計模式可以幫助開發(fā)人員提高代碼的可重用性、可維護性和可擴展性。 設計模式有很多,本文主要介紹單例模式. 單例模式是一種創(chuàng)建型設

    2024年02月11日
    瀏覽(28)
  • 【Java多線程】關于多線程的一些案例 —— 單例模式中的餓漢模式和懶漢模式以及阻塞隊列

    【Java多線程】關于多線程的一些案例 —— 單例模式中的餓漢模式和懶漢模式以及阻塞隊列

    目錄 1、單例模式 1.1、餓漢模式 2.1、懶漢模式? 2、阻塞隊列 2.1、BlockingQueue 阻塞隊列數據結構 對框架和設計模式的簡單理解就是,這兩者都是“大佬”設計出來的,讓即使是一個代碼寫的不太好的“菜雞程序員”也能寫出還可以的代碼。 設計模式也可以認為是對編程語言語

    2024年03月23日
    瀏覽(27)
  • 【單例模式】餓漢模式和懶漢模式的單例模式

    設計模式是一種 在軟件設計中經過驗證的解決問題的方案或者模版 。它們是從實踐中總結出來的,可以幫助解決常見的設計問題,提高代碼的重用性、維護性和擴展性。 設計模式可以分為三大類: 創(chuàng)建型模式(Creational Patterns) :創(chuàng)建型模式關注對象的實例化過程,包括如

    2024年02月16日
    瀏覽(24)
  • 設計模式之單例模式(懶漢, 餓漢)

    設計模式之單例模式(懶漢, 餓漢)

    單例模式是一種常用的軟件設計模式, 該模式的主要目的是確保某一個類在內存中只能有一個實例對象, 通過單例模式的方法創(chuàng)建的類在當前進程中只有一個實例對象. 常見的單例模式有兩種: 餓漢式, 這里的 “餓” 意義表述不夠清晰, 用 “急” 來表述意義更加容易聯(lián)想一些

    2024年02月22日
    瀏覽(20)
  • 單例模式(餓漢式單例 VS 懶漢式單例)

    單例模式(餓漢式單例 VS 懶漢式單例)

    所謂的單例模式就是保證某個類在程序中只有一個對象 1.構造方法私有化(保證對象的產生個數) ? ? ? ? 創(chuàng)建類的對象,要通過構造方法產生對象 ? ? ? ?構造方法若是public權限,對于類的外部,可以隨意創(chuàng)建對象,無法控制對象個數 ? ? ? 構造方法私有化,這樣類的外

    2024年02月09日
    瀏覽(21)
  • 單例模式(懶漢式和餓漢式)

    單例模式是指保證某個類在整個軟件系統(tǒng)中只有一個對象實例,并且該類僅提供一個返回其對象實例,由于單例模式在內存中只有一個實例,減少了內存開支,特別是一個對象需要頻繁地創(chuàng)建、銷毀時,而且創(chuàng)建或銷毀時性能又無法優(yōu)化,單例模式的優(yōu)勢就非常明顯。 在計算

    2024年02月13日
    瀏覽(25)
  • 單例模式:懶漢式和餓漢式

    單例模式:懶漢式和餓漢式

    目錄 懶漢模式和餓漢模式 區(qū)別 示例 懶漢模式線程不安全 懶漢模式線程安全 ?懶漢模式內部靜態(tài)變量線程安全 餓漢式線程安全 指的是在系統(tǒng)生命周期內,只產生一個實例。 分為 懶漢式 和 餓漢式 創(chuàng)建時機和線程安全 線程安全 :多線程共享資源的過程中,線程安全通過同

    2024年02月16日
    瀏覽(22)
  • JavaEE:單例模式(餓漢模式和懶漢模式)精講

    JavaEE:單例模式(餓漢模式和懶漢模式)精講

    前言 什么是單例模式? 其實用通俗的話就是程序猿約定俗成的一些東西,就比如如果你繼承了一個抽象類,你就要重寫里面的抽象方法,如果你實現了一個接口,你就要重寫里面的方法。如果不進行重寫,那么編譯器就會報錯。這其實就是一個規(guī)范。 而單例模式能保證某個

    2024年02月04日
    瀏覽(25)
  • 自學設計模式(類圖、設計原則、單例模式 - 餓漢/懶漢)

    自學設計模式(類圖、設計原則、單例模式 - 餓漢/懶漢)

    設計模式需要用到面向對象的三大特性——封裝、繼承、多態(tài)(同名函數具有不同的狀態(tài)) UML類圖 eg.—— 描述類之間的關系(設計程序之間畫類圖) ?+: public; #: protected; -: private; 下劃線: static 屬性名:類型(=默認值) 方法和變量分開------- 虛函數斜體,純虛函數在虛函數類

    2024年02月11日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包