欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

單例模式(餓漢、懶漢)高頻面試考點

單例模式涉及到一個單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。

注意:

  • 1、單例類只能有一個實例。
  • 2、單例類必須自己創(chuàng)建自己的唯一實例。
  • 3、單例類必須給所有其他對象提供這一實例。

餓漢模式(初始就直接創(chuàng)建好)

類加載的時候?qū)嵗齽?chuàng)建并初始化好了,所以是線程安全的。

//外界不能 new 這個類,所以用 static 來修飾字段和方法
//不允許在類外修改創(chuàng)建的實例,所以實例用 private 聲明
public class Singleton {
    private Singleton(){}
    private static Singleton singleton=new Singleton();//直接創(chuàng)建好
    public static Singleton getInstance(){
        return singleton;
    }

懶漢模式(需要時再創(chuàng)建)雙重檢測保證線程安全

singleton = new Singleton();

該語句非原子操作,實際是三個步驟。

  • 1.給singleton分配內(nèi)存;
  • 2.調(diào)用 Singleton 的構(gòu)造函數(shù)來初始化成員變量;
  • 3.將給singleton對象指向分配的內(nèi)存空間(此時singleton才不為null);

必須使用volatile保證執(zhí)行順序,比如三個步驟重排序后為1 3 2,這樣第一個線程初始化對象到一半,第二個線程來發(fā)現(xiàn)已經(jīng)不是null了就直接返回了 實際上該對象此時還沒有完全初始化 可能會出現(xiàn)這個問題。

synchronized使用Singleton類的Class對象作為鎖對象,當(dāng)多個線程同時訪問getInstance()方法時,只有一個線程能夠進(jìn)入同步代碼塊實例化Singleton類,保證了單例的唯一性。

public class Singleton {
    private Singleton(){}
    private static volatile Singleton singleton=null;
    public static Singleton getInstance(){
        if(singleton==null){//第一次判斷是為了提升效率,先判斷若不為null,鎖也沒必要搶,搶鎖開銷是很大的
            synchronized (Singleton.class){
                if(singleton==null){
                    singleton=new Singleton();
                }
            }
        }
        return singleton;
    }
}

全部評論

相關(guān)推薦

1.java中hashmap是如何解決hash沖突2.jdk1.7 hashmap為什么是頭插入,到1.8改為尾插3.java中多態(tài)是什么4.jvm層面是如何實現(xiàn)多態(tài)的,比如我調(diào)用了父類的對象jvm是如何知道我調(diào)用的是子類的方法5.static修飾的變量或者方法為什么不能調(diào)用非static修飾變量或者方法6.Threadlocal擴容或者清理的邏輯是怎么樣的7.如果讓你實現(xiàn)一個單例模式的話,你會如何實現(xiàn)8.單例模式的變量為什么要用volite修飾,如果我不加會出現(xiàn)什么問題9.inndob是如何做到可重復(fù)讀的隔離級別10.inndob索引為什么要使用b+樹11.b+樹某些情況下表現(xiàn)會比較劣勢,說一下哪些情況會比較劣勢12.網(wǎng)站鍵入url到網(wǎng)頁渲染出來都發(fā)生了什么13.https握手加密流程是怎么樣的14.你實習(xí)過程中子查詢導(dǎo)致的慢sql你是如何排查并優(yōu)化的15.你是如何避免同一個新聞重復(fù)抓取的,其中里面的redis分布式鎖是起到了一個什么樣的作用16.如果同一篇通稿被不同的平臺發(fā)出,這個去重你要如何去做17.用原子變量去做線程的創(chuàng)建與銷毀,這個是怎么做的18.為什么不直接用線程池來做線程的管理,是有什么考慮嗎19.如果redis隊列里面沒有數(shù)據(jù),你這個while不會把cpu資源給打上去嗎20.如果將線程銷毀的話,何時會再次啟用呢21.你在做項目的時候碰到最困難的問題是什么手撕:快排
查看21道真題和解析
點贊 評論 收藏
分享
評論
3
8
分享

創(chuàng)作者周榜

更多
牛客網(wǎng)
??推髽I(yè)服務(wù)