久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

Java 如何安全的發(fā)布對象

瀏覽:7日期:2022-08-18 17:48:51
安全發(fā)布對象 在靜態(tài)初始化函數(shù)中初始化一個對象引用 將對象的引用保存到volatile類型域或者AtomicReference對象中 將對象的引用保存到某個正確構(gòu)造對象的final類型域中 將對象的引用保存到一個由鎖保護(hù)的域中

Spring 框架中,Spring管理的類都是單例模式。如何保證一個實(shí)例只被初始化一次,且線程安全?通過不同單例的寫法,具體描述安全發(fā)布對象的四種方法:

在靜態(tài)初始化函數(shù)中初始化一個對象的引用(不推薦)

package com.rumenz.task.single;//線程安全//餓漢模式//靜態(tài)代碼塊初始化public class SingletonExample { private SingletonExample(){ //初始化操作 } private static SingletonExample singletonExample=null; static { singletonExample=new SingletonExample(); } public static SingletonExample getInstance(){ return singletonExample; }}//或者package com.rumenz.task.single;//線程安全//餓漢模式//靜態(tài)代碼塊初始化public class SingletonExample { private SingletonExample(){ //初始化操作 } private static SingletonExample singletonExample=new SingletonExample(); public static SingletonExample getInstance(){ return singletonExample; }}

缺點(diǎn):用不用都會初始化對象,如果初始化工作較多,加載速度會變慢,影響系統(tǒng)性能。

將對象的引用保存到volatile類型或AtomicReference對象中(推薦)

package com.rumenz.task.single;//線程安全//懶漢模式public class SingletonExample1 { private SingletonExample1() { //初始化操作 } // 1、memory = allocate() 分配對象的內(nèi)存空間 // 2、ctorInstance() 初始化對象 // 3、instance = memory 設(shè)置instance指向剛分配的內(nèi)存 // 單例對象 volatile + 雙重檢測機(jī)制 -> 禁止指令重排 private volatile static SingletonExample1 singletonExample1=null; //靜態(tài)工廠方法 public static SingletonExample1 getInstance(){ if(singletonExample1==null){ //雙重檢測 synchronized(SingletonExample1.class){ //同步鎖if(singletonExample1==null){ singletonExample1=new SingletonExample1();} } } return singletonExample1; }}

優(yōu)點(diǎn):按需加載缺點(diǎn):第一次初始化的時候可能會比較慢

通過synchronized(不推薦)

package com.rumenz.task.single;public class SingletonExample3 { //私有構(gòu)造函數(shù) private SingletonExample3(){ //初始化操作 } private static SingletonExample3 singletonExample3=null; //靜態(tài)的工廠方法 public static synchronized SingletonExample3 getSingletonExample3(){ if(singletonExample3==null){ singletonExample3=new SingletonExample3(); } return singletonExample3; }}

缺點(diǎn):每次進(jìn)入getSingletonExample3都會加鎖,耗費(fèi)資源,故不推薦使用。

枚舉(推薦)

package com.rumenz.task.single;public class SingletonExample4 { //私有構(gòu)造函數(shù) private SingletonExample4(){ //初始化 } public static SingletonExample4 getSingletonExample4(){ return Singleton.INSTANCE.getSingleton(); } private enum Singleton{ INSTANCE; private SingletonExample4 singleton; Singleton(){ singleton=new SingletonExample4(); } public SingletonExample4 getSingleton(){ return singleton; } }}

優(yōu)點(diǎn):天然線程安全,可防止反射生成實(shí)例,推薦使用

以上就是Java 如何安全的發(fā)布對象的詳細(xì)內(nèi)容,更多關(guān)于Java 安全的發(fā)布對象的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 成人妇女免费播放久久久 | 在线观看国产视频 | 久草热8精品视频在线观看 黄色片网站视频 | 亚洲 欧美 精品 | 97成人在线免费视频 | 国产欧美精品一区二区 | 美女中文字幕视频 | 欧美日韩在线精品 | 青青草免费在线视频 | 欧美精品导航 | 日韩精品一区二区三区老鸭窝 | 日韩在线国产精品 | 色欧美视频 | 欧美大片黄 | 中文字幕日韩欧美一区二区三区 | 亚洲欧美一级 | 国产亚洲欧美一区 | 亚洲精品一区二区三区 | 午夜免费影视 | 免费一区二区三区 | 国产精品久久久久久久岛一牛影视 | 91精品国产综合久久久久久漫画 | 亚洲视频在线看 | 亚洲欧洲综合 | 一级黄色a视频 | 中国大陆高清aⅴ毛片 | 国产精品毛片久久久久久久 | 日本免费三片免费观看 | 久久久网| 国产在线观看一区 | 日日干夜夜操 | 欧美日本韩国一区二区 | 欧美在线亚洲 | 99精品一区二区三区 | 亚洲一区二区在线播放 | 免费在线一区二区三区 | 精品日韩欧美一区二区在线播放 | av一级毛片 | 午夜在线小视频 | 免费国产一区 | a在线免费观看 |