国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

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

dadong / 644人閱讀

摘要:面試時(shí)經(jīng)常會(huì)問(wèn)到關(guān)于單例設(shè)計(jì)模式,因?yàn)樗芸疾斓闹R(shí)點(diǎn)較多且在開(kāi)發(fā)中經(jīng)常用到。那我就來(lái)說(shuō)一說(shuō)我對(duì)于單例設(shè)計(jì)模式的一些淺見(jiàn)。還有另一種實(shí)現(xiàn)方法稱(chēng)為懶漢式。但以上代碼會(huì)出現(xiàn)線程安全問(wèn)題。

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

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

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

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

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

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

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

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

答案:開(kāi)發(fā)一般用“餓漢式”,因?yàn)樗粫?huì)出現(xiàn)問(wèn)題且代碼簡(jiǎn)單,面試時(shí)用“懶漢式”,因?yàn)樗粌H考察了單例模式實(shí)現(xiàn),還考察了線程安全。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/66264.html

相關(guān)文章

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

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

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

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

    Flink_China 評(píng)論0 收藏0
  • 手撕面試官系列(五):Tomcat+Mysql+設(shè)計(jì)模式面試專(zhuān)

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

    GraphQuery 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<