在Java編程語言中,單例是常見的設計模式之一。單例即指某一個類在整個程序中只有一個實例對象。單例可以被用作配置文件、線程池、數據庫連接池等。下面我們來看一下如何實現一個單例類。
public class Singleton { private static Singleton instance; private Singleton(){} //私有化構造函數 public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }
以上代碼中,我們通過構造函數將Singleton私有化,避免了其他類通過直接的類構造器來生成新的實例。此外,我們通過getInstance()方法來獲取單例類的唯一實例。在getInstance()方法中,如果instance為null,則我們會生成一個新的實例,否則我們實例化的對象已經被創建,直接返回現有的實例即可。這種方法實現的單例是懶加載的,即用到的時候才創建實例,可以避免啟動時就創建實例,節省資源。
此外,在單線程中,我們可以使用以上代碼實現,但是在多線程中需要對getInstance()方法進行改進。我們需要在其中加入synchronized關鍵字,避免多個線程同時訪問getInstance()方法,從而導致生成多個實例的可能性。
public class Singleton { private static Singleton instance; private Singleton(){} //私有化構造函數 public static synchronized Singleton getInstance(){ //在方法上加synchronized關鍵字 if(instance == null){ instance = new Singleton(); } return instance; } }
以上代碼中,我們在getInstance()方法上加入了synchronized關鍵字,避免了多個線程同時進入getInstance()方法的可能性。這種方法是線程安全的。
上一篇vue清除本地存儲