国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

使用enum枚舉數據類型實現多線程中的單例模式

2019-11-06 06:34:41
字體:
來源:轉載
供稿:網友

本文講解兩方面的內容

1.枚舉的使用

2.多線程中單例模式的實現

1.枚舉的使用

參看http://developer.51cto.com/art/201107/275031.htm

http://www.cnblogs.com/zhaoyanjun/p/5659811.html

自定義枚舉類如下

public class MyObject {    public enum Color {        RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);//枚舉變量        //枚舉變量的屬性,和枚舉變量對應        PRivate String name ;        private int index ;        //枚舉類的構造方法,私有是為了防止被實例化        private Color( String name , int index ){            this.name = name ;            this.index = index ;        }        //set,get方法        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        public int getIndex() {            return index;        }        public void setIndex(int index) {            this.index = index;        }    }}

2.多線程中單例模式的實現

(1)使用靜態變量加載(餓漢式)

(2)延遲加載(懶漢式)

懶漢式中的同步問題解決:

public class MyObject {    private volatile static MyObject myObject;    public static MyObject getInstance(){        try{            if(myObject!=null){                //            }else{                Thread.sleep(3000);//模擬創建對象的準備性工作                synchronized (MyObject.class){                    //再次判斷是為了保證可能有多個線程停在上面一步,為了確保只new一個實例;                    //可能當該線程第一次if時為null,在sleep過程中,剛好已經有線程new實例了,需要再次判斷                    if(myObject==null){                        myObject=new MyObject();                    }                }            }        } catch (InterruptedException e) {            e.printStackTrace();        }        return myObject;    }}(3)使用靜態內置類實現單例模式

這個和靜態變量加載相似,只是將該語句添加到內部類中

(4)使用靜態代碼塊實現單例模式

(5)序列化與反序列化中出先new實例,破壞了單例;解決方法是在反序列化中使用readResolve()方法獲取對象

(6) 使用enum枚舉實現單例模式

public enum MyObject2 {    connectionFactory;//枚舉變量        private Connection connection;//枚舉變量的屬性        private MyObject2(){        //在此處完成屬性的賦值        //connection=.....    }    //返回該屬性    public Connection getConnection(){        return connection;    }}如上所示,即便是多個線程獲取連接,也只會有一個connection


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南安市| 汕头市| 镶黄旗| 宣恩县| 保定市| 嵊泗县| 嘉鱼县| 洛隆县| 隆子县| 公主岭市| 宜兰市| 库伦旗| 屏山县| 垦利县| 广宁县| 龙川县| 连云港市| 兴国县| 阿鲁科尔沁旗| 马鞍山市| 常熟市| 仙居县| 那曲县| 南乐县| 游戏| 鹤庆县| 沛县| 宁阳县| 杭锦旗| 石家庄市| 广安市| 苏尼特右旗| 静海县| 垣曲县| 西丰县| 屏东县| 太仓市| 随州市| 安岳县| 玛多县| 鸡东县|