溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java 多線程-單例模式

發(fā)布時(shí)間:2020-07-13 14:55:08 來(lái)源:網(wǎng)絡(luò) 閱讀:286 作者:wx5d21d5e6e5ab1 欄目:編程語(yǔ)言

單例模式
對(duì)外只有一個(gè)對(duì)象,對(duì)內(nèi)不管,比如每臺(tái)電腦都只有一個(gè)的任務(wù)管理器
1、構(gòu)造去私有化
2、內(nèi)部提供私有靜態(tài)屬性--存儲(chǔ)對(duì)象的地址
3、提供公共的靜態(tài)方法訪--獲取屬性
成員方法鎖定本對(duì)象數(shù)據(jù)為this,靜態(tài)方法鎖定為類名.class

public class my {

//2、提供私有靜態(tài)屬性
private volatile static my instance;  //避免new對(duì)象時(shí)指令重排
//1、構(gòu)造器私有化
private my(){

}
//3、提供公共靜態(tài)方法訪問(wèn)屬性
public static my getInstance()
{
    if(null!=instance)  //如果已經(jīng)創(chuàng)建好對(duì)象,則不需要多個(gè)線程等待創(chuàng)建對(duì)象
    {
        return instance;
    }
    synchronized(my.class) //綁定類的模子
    {
    if(null==instance) //多線程可能創(chuàng)建多個(gè)對(duì)象,加入同步
    {
        instance=new my();//可能發(fā)生指令重排
        //new對(duì)象發(fā)生:1、開辟空間2、初始化對(duì)象信息3、返回對(duì)象的地址給引用instance
        //過(guò)程很慢,可能第三步會(huì)提前于第二步,a線程可能在初始化信息的時(shí)候 ,b線程可能已經(jīng)拿到對(duì)象
        //加入voliatle避免這種情況
    }
    }
    return instance;

}

public static void main(String[]args) throws InterruptedException
{
//打印對(duì)象地址,檢驗(yàn)單例模式是否成功
    Thread t=new Thread(()->{
        System.out.println(my.getInstance());
    });
    t.start();
    System.out.println(my.getInstance());
}

}
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI