完美單身

我不時遇到一些Java程序員,他們不確定他們應該如何正確實現Singleton模式。 (如果您不知道什么是Singleton,請嘗試Wikipedia: Singleton模式 )。

我并不是在談論在線程環境中的正確實現。 但是,使用最常見的實現,您可以在Internet上找到所需的內容,從而可以輕松創建任意多個單例。

試想一下,您有以下常見的單例實現:

public final class NonSafeSingleton implements Serializable {private static final NonSafeSingleton INSTANCE = new NonSafeSingleton();private NonSafeSingleton() {}public static NonSafeSingleton getInstance() {return INSTANCE;}
}

現在專注于可序列化單詞。 再想一秒鐘…是的,您是對的。 如果您通過RMI發送這些東西,您將獲得第二實例。 甚至需要執行一些內存序列化,反序列化和kaboom操作! 您剛剛取消了一般的Singleton合同。 那不太好。 但是如何解決呢? 通常,我使用兩種方法:

  1. 困難的方式(或者您使用1.4或更舊的Java)
    您需要在Singleton類中實現readResolve方法。 這個小東西用來覆蓋已創建的序列化機制。 您返回的內容將用于代替序列化產生的數據(有關詳細信息,請參見: Serializable Javadoc )。 只需在此處返回您的實例:
    ...protected Object readResolve() throws ObjectStreamException {return INSTANCE;}
    ...
  2. 簡單方法(是的,我使用的是1.5或更高版本)
    將您的單例類更改為枚舉,并刪除私有構造函數和getInstance方法。 是的,就是這么簡單。 然后,您可以免費獲得它。
    public enum SafeSingleton implements Serializable {INSTANCE;
    }

在實施下一個Singleton時,請記住這一點。 如果大量使用RMI,可以使您的生活更輕松。

參考:來自我們的JCG合作伙伴 Marek Piechut的《完美單身漢》,在《 發展世界》中 。

相關文章 :
  • Java中可怕的雙重檢查鎖定成語
  • Java Secret:使用枚舉構建狀態機
  • 依賴注入–手動方式
  • Java泛型快速教程
  • JVM如何處理鎖

翻譯自: https://www.javacodegeeks.com/2011/08/perfect-singleton.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374767.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374767.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374767.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

力扣移動零

給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。 我寫的代碼思路是從開始元素找0,找到了就將這個0后面的元素向前移一位 class Solution {public void moveZeroes(int[] nums) {int n nums.length;…

Doclava:來自Google的自定義Javadoc Doclet

Doclava是Google的自定義Javadoc Doclet,由Google Guice使用(請參閱稍冷的 Javadocs )。 Doclava使用JSilver作為其模板引擎,這是Clearsilver的純Java實現。 我個人喜歡聯合文檔的想法,它允許文檔在打開的項目上相互鏈…

linux cat顯示若干行

【一】從第3000行開始,顯示1000行。即顯示3000~3999行 cat filename | tail -n 3000 | head -n 1000 【二】顯示1000行到3000行 cat filename| head -n 3000 | tail -n 1000 *注意兩種方法的順序 分解: tail -n 1000:顯示最后1000行 tail -n …

【Stackoverflow好問題】java在,如何推斷陣列Array是否包括指定的值

問題java中,怎樣推斷數組Array是否包括指定的值精華回答1.Arrays.asList(...).contains(...) 2.使用 Apache Commons Lang包中的ArrayUtils.containsString[] fieldsToInclude { "id", "name", "location" };if ( ArrayUtils.contai…

力扣移除元素

給你一個數組 nums 和一個值 val,你需要 原地 移除所有數值等于 val 的元素,并返回移除后數組的新長度。 不要使用額外的數組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數組。 元素的順序可以改變。你不需要考慮數組中超出新長度后面…

在域驅動設計中使用狀態模式

域驅動設計(DDD)是一種軟件開發方法,其中,通過將實現與核心業務概念的不斷發展的模型相連接,可以解決問題的復雜性。 該術語是由Eric Evans創造的,并且有一個DDD專用站點可以促進其使用。 根據其定義&#…

使用selenium進行密碼破解(繞過賬號密碼JS加密)

經常碰到網站,賬號密碼通過js加密后進行提交。通過burp攔截抓到的賬號密碼是加密后的,所以無法通過burp instruder進行破解。只能模擬瀏覽器填寫表單并點擊登錄按鈕進行破解。于是想到了自動化web測試工具selenium,代碼如下,測試效…

力扣刪除排序數組中的重復項

給你一個有序數組 nums ,請你 原地 刪除重復出現的元素,使每個元素 只出現一次 ,返回刪除后數組的新長度。 不要使用額外的數組空間,你必須在 原地 修改輸入數組 并在使用 O(1) 額外空間的條件下完成。 我沒注意到“有序”這一條…

POJ1789-Truck History .

題目鏈接:http://poj.org/problem?id1789 題目的大概意思就是給你n個字符串。每個字符串只有7的長度。然后分別給這些字符串編號。不同編號之間的距離就是他們有多少個不同的字母。(同一個位置字母不相同也算)然后一個編號只能由另一個派生…

Java Fork / Join進行并行編程

最近幾年,計算機處理器領域發生了范式轉變。 多年來,處理器制造商一直在提高時鐘頻率,因此開發人員享受到這樣的事實,即他們的單線程軟件執行得更快,而無需他們付出任何努力。 現在,處理器制造商青睞多核芯…

arm-elf-gcc交叉編譯器的使用教程

arm-elf-gcc交叉編譯器的使用教程 一開始需要安裝arm-elf-gcc,但是這是一個32位的程序,我是安裝了64位的系統,據說安裝ia32.libs依賴庫能運行這個,但是看到博客上面前人安裝完了系統圖標少了一半,然后就怕了。經過了翻…

力扣刪除排序數組中的重復項 II

給你一個有序數組 nums ,請你 原地 刪除重復出現的元素,使每個元素 最多出現兩次 ,返回刪除后數組的新長度。 不要使用額外的數組空間,你必須在 原地 修改輸入數組 并在使用 O(1) 額外空間的條件下完成。 思路: 雙指針…

2 android學習資料

http://blog.csdn.net/lmj623565791 http://blog.csdn.net/harvic880925/article/details/50995268轉載于:https://www.cnblogs.com/YyuTtian/p/5440930.html

建立自己的GWT Spring Maven原型

大家好, 在觀看Justin撰寫的有關Spring和GWT的非常有趣的文章時,我認為展示如何構建自己的自定義Maven原型非常有用。我們將展示的原型基于Justin的上一個項目,并包括各種技術,例如Spring , GWT , AspectJ…

C# 連接Oracle數據庫異常總結

這2天因為工作需要連接Oracle數據庫,中間發生了很多問題 一、使用OleDbConnection連接數據庫 ------------------ ProviderOraOLEDB.Oracle.1;User IDsajet;Passwordtech;Data Source(DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.66.225)(…

力扣顏色分類

給定一個包含紅色、白色和藍色,一共 n 個元素的數組,原地對它們進行排序,使得相同顏色的元素相鄰,并按照紅色、白色、藍色順序排列。 此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。 思路:將紅色和藍色…

Cassandra,MongoDB,CouchDB,Redis,Riak,HBase比較

克里斯托夫科瓦奇(KristfKovcs)對六個最受歡迎的“ NoSQL ”數據庫實現進行了非常有趣的簡短比較 。 除了Kristf的工作之外,我還想提供一些鏈接,我相信這些鏈接將對有興趣關注“ NoSQL ”社區的所有人員提供幫助: No…

程序員需要謹記的九大安全編碼規則

歷史已經證明,軟件設計的缺陷一直是導致其漏洞被利用的最主要的罪魁禍首。安全專家發現,多數漏洞源自常見軟件中相對有限的一些漏洞。軟件開發者和設計者應當嚴格檢查程序中的各種錯誤,盡量在軟件部署之前就減少或清除其中的漏洞。 下面列舉的…

HDU 2897

Problem Description當日遇到月,于是有了明。當我遇到了你,便成了侶。那天,日月相會,我見到了你。而且,大地失去了光輝,你我是否成侶?這注定是個凄美的故事。(以上是廢話&#xff09…

力扣合并兩個有序數組

題目:給你兩個按 非遞減順序 排列的整數數組 nums1 和 nums2,另有兩個整數 m 和 n ,分別表示 nums1 和 nums2 中的元素數目。 請你 合并 nums2 到 nums1 中,使合并后的數組同樣按 非遞減順序 排列。 注意:最終&#…