成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java面試題:java中的單例設(shè)計模式及兩種實現(xiàn)方法的代碼舉例

dadong / 653人閱讀

摘要:面試時經(jīng)常會問到關(guān)于單例設(shè)計模式,因為它能考察的知識點較多且在開發(fā)中經(jīng)常用到。那我就來說一說我對于單例設(shè)計模式的一些淺見。還有另一種實現(xiàn)方法稱為懶漢式。但以上代碼會出現(xiàn)線程安全問題。

Java面試時經(jīng)常會問到關(guān)于單例設(shè)計模式,因為它能考察的知識點較多且在開發(fā)中經(jīng)常用到。
那我就來說一說我對于單例設(shè)計模式的一些淺見。
首先,在Java中,什么是單例呢?
就是保證類在內(nèi)存中只有一個對象。
那么問題來了,如何才能保證類在內(nèi)存中只有一個對象呢?
A:把構(gòu)造方法私有化;
B:在成員變量中自己new一個類實例,并用private將其私有化且用static將其靜態(tài)修飾;
C:對外提供一個靜態(tài)方法返回這個對象。
依據(jù)以上的思路,就可以寫出如下的代碼:

public class Student{
    private Student(){}
    private static Student s=new Student();
    public static Student getStudent(){
        return s;
    }
}

以上的實現(xiàn)方法在業(yè)內(nèi)稱為”餓漢式”,可以這樣理解:這個單例對象隨著類的加載就被創(chuàng)建出來了,就像餓狼撲食一樣,這里的”狼”就是單例對象,而“食”就是類加載。
還有另一種實現(xiàn)方法稱為“懶漢式”。先看代碼實現(xiàn):

public class Student{
    private Student(){}
    private static Student s=null;
    public static Student getStudent()
    {
        if(s==null)
        {
            s=new Student();
        }
        return s;
    }
}

從代碼中可以看出:這個單例對象是隨著調(diào)用類的靜態(tài)方法才被被創(chuàng)建的,并不是隨著類的加載而被創(chuàng)建,所以它要滯后于類加載,故稱為“懶漢式”。
但以上代碼會出現(xiàn)線程安全問題。
那就讓我來分析一下為什么會出現(xiàn)線程安全問題
判斷是否會出現(xiàn)線程安全問題必須滿足一下三個條件,缺一不可:
A:是否為多線程環(huán)境;
B:是否有共享數(shù)據(jù);
C:是否有多條語句操作共享數(shù)據(jù)

那我就按這三個條件分析以上代碼:
A是有可能的
B共享數(shù)據(jù)就是 Student對象
C
if(t==null){
t=new Teacher();
}
這里有兩條語句在操作共享數(shù)據(jù)
那么問題又來了,如何解決線程安全問題呢?
加鎖
而加鎖又有兩種實現(xiàn)方法:1.同步代碼塊;2.同步方法
顯然對以上代碼而言,同步方法是個簡潔明了的。所以修改后的代碼如下:

public class Student{
    private Student(){}
    private static Student s=null;
    public static synchronized Student getStudent(){
        if(s==null)
        {
            s=new Student();
        }
        return s;
    }
}

那么,這兩種單例實現(xiàn)代碼的應(yīng)用場景是什么呢?

答案:開發(fā)一般用“餓漢式”,因為它不會出現(xiàn)問題且代碼簡單,面試時用“懶漢式”,因為它不僅考察了單例模式實現(xiàn),還考察了線程安全。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66264.html

相關(guān)文章

  • Spring IOC知識點一網(wǎng)打盡!

    摘要:使用的好處知乎的回答不用自己組裝,拿來就用。統(tǒng)一配置,便于修改。 前言 只有光頭才能變強(qiáng) 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡單啦 單例模式你會幾種寫法? 工廠模式理解了沒有? 在刷Spring書籍的時候花了點時間去學(xué)習(xí)了單例模式和工廠模式,總的來說還是非常值得的! 本來想的是刷完《Spring 實戰(zhàn) (第4版)》和《精通Spring4.x 企業(yè)應(yīng)用開發(fā)實戰(zhàn)》...

    djfml 評論0 收藏0
  • 手撕面試官系列(二):開源框架面試Spring+SpringMVC+MyBatis

    摘要:跳槽時時刻刻都在發(fā)生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風(fēng),看到同事一個個都走了,自己也盲目的開始面試起來期間也沒有準(zhǔn)備充分,到底是因為技術(shù)原因影響自己的發(fā)展,偏移自己規(guī)劃的軌跡,還是錢給少了,不受重視。 跳槽時時刻刻都在發(fā)生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風(fēng),看到同事一個個都走了,自己也盲目的開始面試起來(期間也沒有準(zhǔn)備充分),到底是因為技...

    Flink_China 評論0 收藏0
  • 手撕面試官系列(五):Tomcat+Mysql+設(shè)計模式面試

    摘要:面試題答案領(lǐng)取方式見主頁的缺省端口是多少,怎么修改有哪幾種運行模式優(yōu)化有幾種部署方式容器是如何創(chuàng)建類實例用到了什么原理如何優(yōu)化內(nèi)存怎樣調(diào)優(yōu)垃圾回收怎樣策略調(diào)優(yōu)怎樣共享處理怎樣添加遠(yuǎn)程監(jiān)控專業(yè)點的分析工具有哪些關(guān)于的數(shù)目怎樣監(jiān)視的內(nèi)存使用情況 TomcatshowImg(https://segmentfault.com/img/remote/1460000019788819);(面試題+...

    GraphQuery 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<