日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

was修改类加载模式_java基础——单例(Singleton)模式介绍

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 was修改类加载模式_java基础——单例(Singleton)模式介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本概括

詳解

一、單例模式定義:

單例模式確保某個類只有一個實例,而且自行實例化并向整個系統提供這個實例。

二、單例模式特點:

1、單例類只能有一個實例。

2、單例類必須自己創建自己的唯一實例。

3、單例類必須給所有其他對象提供這一實例。

單例模式保證了全局對象的唯一性,比如系統啟動讀取配置文件就需要單例保證配置的一致性。

三、線程安全的問題

一方面在獲取單例的時候,要保證不能產生多個實例對象,后面會詳細講到五種實現方式;

另一方面,在使用單例對象的時候,要注意單例對象內的實例變量是會被多線程共享的,推薦使用無狀態的對象,不會因為多個線程的交替調度而破壞自身狀態導致線程安全問題,比如我們常用的VO,DTO等(局部變量是在用戶棧中的,而且用戶棧本身就是線程私有的內存區域,所以不存在線程安全問題)。

四、單例模式的側重點

實現要點

l Singleton模式是限制而不是改進類的創建。

l Singleton類中的實例構造器可以設置為Protected以允許子類派生。

l Singleton模式一般不要支持Icloneable接口,因為這可能導致多個對象實例,與Singleton模式的初衷違背。

l Singleton模式一般不要支持序列化,這也有可能導致多個對象實例,這也與Singleton模式的初衷違背。

l Singleton只考慮了對象創建的管理,沒有考慮到銷毀的管理,就支持垃圾回收的平臺和對象的開銷來講,我們一般沒必要對其銷毀進行特殊的管理。

l 理解和擴展Singleton模式的核心是“如何控制用戶使用new對一個類的構造器的任意調用”。

l 可以很簡單的修改一個Singleton,使它有少數幾個實例,這樣做是允許的而且是有意義的。

優點

l 實例控制:Singleton 會阻止其他對象實例化其自己的 Singleton 對象的副本,從而確保所有對象都訪問唯一實例

l 靈活性:因為類控制了實例化過程,所以類可以更加靈活修改實例化過程

缺點

l 開銷:雖然數量很少,但如果每次對象請求引用時都要檢查是否存在類的實例,將仍然需要一些開銷。可以通過使用靜態初始化解決此問題,上面的五種實現方式中已經說過了。

l 可能的開發混淆:使用 singleton 對象(尤其在類庫中定義的對象)時,開發人員必須記住自己不能使用 new 關鍵字實例化對象。因為可能無法訪問庫源代碼,因此應用程序開發人員可能會意外發現自己無法直接實例化此類。

l 對象的生存期:Singleton 不能解決刪除單個對象的問題。在提供內存管理的語言中(例如基于 .NET Framework 的語言),只有 Singleton 類能夠導致實例被取消分配,因為它包含對該實例的私有引用。在某些語言中(如 C++),其他類可以刪除

對象實例,但這樣會導致 Singleton 類中出現懸浮引用。

適用性

l 當類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時。

l 當這個唯一實例應該是通過子類化可擴展的,并且客戶應該無需更改代碼就能使用一個擴展的實例時。

應用場景

l 每臺計算機可以有若干個打印機,但只能有一個Printer Spooler,避免兩個打印作業同時輸出到打印機。

l PC機中可能有幾個串口,但只能有一個COM1口的實例。

l 系統中只能有一個窗口管理器。

l .NET Remoting中服務器激活對象中的Sigleton對象,確保所有的客戶程序的請求都只有一個實例來處理。

五、實現單例模式的方式

1.餓漢式單例(立即加載方式)(加載時就已經初始化)

// 餓漢式單例

public class Singleton1 { // 私有構造 private Singleton1() {} private static Singleton1 single = new Singleton1(); // 靜態工廠方法 public static Singleton1 getInstance() { return single; }}

餓漢式單例在類加載初始化時就創建好一個靜態的對象供外部使用,除非系統重啟,這個對象不會改變,所以本身就是線程安全的。

Singleton通過將構造方法限定為private避免了類在外部被實例化,在同一個虛擬機范圍內,Singleton的唯一實例只能通過getInstance()方法訪問。(事實上,通過Java反射機制是能夠實例化構造方法為private的類的,那基本上會使所有的Java單例實現失效。此問題在此處不做討論,姑且閉著眼就認為反射機制不存在。)

性能:性能不是很好,若長期不使用會占用內存空間,內存空間不足時容易造成內存溢出異常。

2.懶漢式單例(延遲加載方式)

// 懶漢式單例

public class Singleton2 { // 私有構造 private Singleton2() {} private static Singleton2 single = null; public static Singleton2 getInstance() { if(single == null){ single = new Singleton2(); } return single; }}

該示例雖然用延遲加載方式實現了懶漢式單例,但在多線程環境下會產生多個single對象,如何改造請看以下方式:

使用synchronized同步鎖

public class Singleton3 {

// 私有構造

private Singleton3() {}

private static Singleton3 single = null;

public static Singleton3 getInstance() {

// 等同于 synchronized public static Singleton3 getInstance()

synchronized(Singleton3.class){

// 注意:里面的判斷是一定要加的,否則出現線程安全問題

if(single == null){

single = new Singleton3();

}

}

return single;

}

}

在方法上加synchronized同步鎖或是用同步代碼塊對類加同步鎖,此種方式雖然解決了多個實例對象問題,但是該方式運行效率卻很低下,下一個線程想要獲取對象,就必須等待上一個線程釋放鎖之后,才可以繼續運行。

public class Singleton4 {

// 私有構造 private Singleton4() {} private static Singleton4 single = null; // 雙重檢查 public static Singleton4 getInstance() { if (single == null) { synchronized (Singleton4.class) { if (single == null) { single = new Singleton4(); } } } return single; }}

使用雙重檢查進一步做了優化,可以避免整個方法被鎖,只對需要鎖的代碼部分加鎖,可以提高執行效率。

3.靜態內部類實現

public class Singleton6 { // 私有構造 private Singleton6() {} // 靜態內部類 private static class InnerObject{ private static Singleton6 single = new Singleton6(); } public static Singleton6 getInstance() { return InnerObject.single; }}

靜態內部類雖然保證了單例在多線程并發下的線程安全性,但是在遇到序列化對象時,默認的方式運行得到的結果就是多例的。

4.static靜態代碼塊實現

// 私有構造

private Singleton6() {} private static Singleton6 single = null; // 靜態代碼塊 static{ single = new Singleton6(); } public static Singleton6 getInstance() { return single; }}

問題

懶漢模式和餓漢模式的區別

懶漢模式:在類加載的時候不被初始化。

餓漢模式:在類加載時就完成了初始化,但是加載比較慢,獲取對象比較快。

餓漢模式是線程安全的,在類創建好一個靜態對象提供給系統使用,懶漢模式在創建對象時不加上synchronized,會導致對象的訪問不是線程安全的

喜歡的可以點下關注。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的was修改类加载模式_java基础——单例(Singleton)模式介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕一区电影 | 国产在线一区不卡 | 国产精品一区二区在线看 | 噜噜噜在线视频 | 美女视频在线观看免费 | 国产经典一区二区 | 欧美精品自拍视频 | 91麻豆精品在线观看 | 国产精品xxx在线观看 | 黄色在线免费视频 | 日韩欧美亚洲国产精品字幕久久久 | 伊人免费在线观看高清版 | 岛国激情| 亚洲一区在线视频观看 | 国产第一页在线播放 | 中文字幕免费高清 | 91久热| 精品国产视频一区二区三区 | 草青青视频 | 国产传媒欧美日韩 | 奇米网7777 | 国产亚洲精品久久久久久久 | 6080毛片| 在线国产精品一区 | 欧美噜噜噜 | 欧美a级黄色片 | 午夜吃瓜 | 久久精品男人 | 国产精品视频一区二区三区在3 | 精品九九 | 亚洲精选久久久 | 欧美视频在线一区二区三区 | 欧美日在线 | 国精品人妻无码一区二区三区喝尿 | 边啃奶头边躁狠狠躁 | 国产一区h| 欧美第二区 | 日韩一级一区 | 久久老司机 | 99精品人妻无码专区在线视频区 | 欧美成人黄色小说 | 中文字幕免费在线观看视频 | 国产精品无人区 | 亚洲一区视频在线 | 香蕉视频网站入口 | 国产精品成人一区二区三区 | 不卡一区在线观看 | 91免费视频国产 | 欧美日韩激情视频 | 日本打屁股网站 | 黑人巨大精品欧美黑白配亚洲 | 国产乱偷| 欧美激情电影一区二区 | av片手机在线观看 | 伊人久久影视 | 亚洲美女精品视频 | 欧美高清性 | 国产精品视频播放 | 香蕉视频网址 | 爱情岛论坛永久入址测速 | 三级三级久久三级久久 | 色综合久久久久 | av天天射 | 8x8x国产精品一区二区 | 久久综合婷婷国产二区高清 | 红桃视频成人在线 | 未满十八18禁止免费无码网站 | 一卡二卡三卡四卡在线 | 日本免费网| 国产精品久久久久久无人区 | 亚洲理论电影在线观看 | 玖草视频在线观看 | 69国产视频 | 毛片高清免费 | 日韩超碰在线 | 亚洲系列中文字幕 | 69精品久久久久久久 | av在线不卡播放 | 一级黄大片 | 四虎8848| 岛国av大片| 日韩在线观看精品 | 熟女人妻一区二区三区免费看 | 久久少妇av | 国产精品野外户外 | 精品视频一区在线观看 | 91成人免费看 | 久久成人国产 | www.日日夜夜 | 青青草成人免费在线视频 | 青娱乐最新地址 | 黄色在线观看免费 | 欧美性猛交xxxx乱大交hd | 国产午夜免费福利 | 美日韩成人av | 视频成人免费 | 伊人网成人 | 国产电影一区二区三区爱妃记 | 神马伦理视频 |