免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
多線程下的單例模式
  • 在多線程下,單例是否仍能實現(xiàn)?
單例從概念上講: 一個JVM里,只能有一個實例
多線程,仍舊是基于同一進程下,自然也是基于同一JVM下,因此符合單例的概念.


  • 我們可以按兩種多線程方式分別進行測試分析:
1.多實例多線程
單例類:
public class MySingleton1 {
    private static final MySingleton1 instance =new MySingleton1();
    
    private MySingleton1(){}
    
    public static MySingleton1 getInstance() {
        return instance;
    }
 }
線程類:run()方法里面調(diào)用單例
    public void run(){
        MySingleton1 mySingleton1=null;
        mySingleton1 = MySingleton1.getInstance();
        System.out.println(mySingleton1+":"+mySingleton1.hashCode());
    }
測試代碼:起10個線程,每個線程都是一個單獨的實例    
        for(int i=0;i<10;i++){            
            Thread t = new Thread(new MyThread(),String.valueOf(i));
            t.start();
            }
看結(jié)果: 證明多線程多實例下,獲取的確實是同一實例
com.machome.singleton.MySingleton1@ca0b6:827574
com.machome.singleton.MySingleton1@ca0b6:827574
com.machome.singleton.MySingleton1@ca0b6:827574
com.machome.singleton.MySingleton1@ca0b6:827574
com.machome.singleton.MySingleton1@ca0b6:827574
com.machome.singleton.MySingleton1@ca0b6:827574
com.machome.singleton.MySingleton1@ca0b6:827574
com.machome.singleton.MySingleton1@ca0b6:827574
com.machome.singleton.MySingleton1@ca0b6:827574
com.machome.singleton.MySingleton1@ca0b6:827574

2.單實例多線程
單例類和線程類都不變
就測試代碼改一下,起10個線程,都引用同一實例
        MyThread myThread= new MyThread();
        for(int i=0;i<10;i++){            
            Thread t = new Thread(myThread,String.valueOf(i));
            t.start();
            }
看結(jié)果:
com.machome.singleton.MySingleton1@1b67f74:28737396
com.machome.singleton.MySingleton1@1b67f74:28737396
com.machome.singleton.MySingleton1@1b67f74:28737396
com.machome.singleton.MySingleton1@1b67f74:28737396
com.machome.singleton.MySingleton1@1b67f74:28737396
com.machome.singleton.MySingleton1@1b67f74:28737396
com.machome.singleton.MySingleton1@1b67f74:28737396
com.machome.singleton.MySingleton1@1b67f74:28737396
com.machome.singleton.MySingleton1@1b67f74:28737396
com.machome.singleton.MySingleton1@1b67f74:28737396


  • 有狀態(tài)單例下的多線程
有狀態(tài)單例
public class MySingleton1 {
    private static final MySingleton1 instance =new MySingleton1();

    private MySingleton1(){}
   
  public static MySingleton1 getInstance() {
        return instance;
    }

    // 狀態(tài)
    private String name;
    private int age;
   
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
       
}
線程類:
在線程中獲取單例,并且在第1號線程和第5號線程分別改變單例的狀態(tài)
public class MyThreadForStateful implements Runnable{
   
    public void run(){
        MySingleton1 mySingleton1=null;
        mySingleton1 = MySingleton1.getInstance();
       
        if(Thread.currentThread().getName().equals("1")){
            mySingleton1.setName("mac");
            mySingleton1.setAge(11);
        }else if(Thread.currentThread().getName().equals("5")){
            mySingleton1.setName("silly");
            mySingleton1.setAge(22);
        }
       
        System.out.println(Thread.currentThread().getName()
                +":"+mySingleton1+":"
                +mySingleton1.getName()+mySingleton1.getAge());
    }
}
測試代碼:
        for(int i=0;i<10;i++){           
            Thread t = new Thread(new MyThreadForStateful(),String.valueOf(i));
            t.start();
            }

執(zhí)行效果:  證明單例的狀態(tài)是被多實例共享的
0:com.machome.singleton.MySingleton1@ca0b6:null0
1:com.machome.singleton.MySingleton1@ca0b6:mac11
2:com.machome.singleton.MySingleton1@ca0b6:mac11
3:com.machome.singleton.MySingleton1@ca0b6:mac11
4:com.machome.singleton.MySingleton1@ca0b6:mac11
5:com.machome.singleton.MySingleton1@ca0b6:silly22
6:com.machome.singleton.MySingleton1@ca0b6:silly22
7:com.machome.singleton.MySingleton1@ca0b6:silly22
8:com.machome.singleton.MySingleton1@ca0b6:silly22
9:com.machome.singleton.MySingleton1@ca0b6:silly22
結(jié)論:只要多線程能成功獲取單例(即多線程獲得的單例實例是相同的),必然能共享單例的狀態(tài)






本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android設計模式之單例模式
單例模式
5.3.8 在Java中一種更好的單例實現(xiàn)方式
Java多線程編程環(huán)境中單例模式的實現(xiàn)
Java設計模式 之 Singleton
單例模式 泛型
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服