一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java 單例模式的實現資料整理

Java 單例模式的實現資料整理

2020-06-29 10:58超超boy JAVA教程

這篇文章主要介紹了Java 單例模式的實現的相關資料,并附簡單實例代碼,需要的朋友可以參考下

Java單例模式的實現,對java 單例模式的幾種實現方法進行了整理:

單例模式好多書上都是這么寫的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class SingleTon1 {
   
  private SingleTon1(){
  }
 
  private static SingleTon1 instance = null;
 
   
  public static SingleTon1 getInstance(){
    if(instance == null){
      instance = new SingleTon1();
    }
    return instance;
  }
}

  但是實際開發中是不會這么寫的,因為有一個嚴重的問題,多線程并發訪問的時候,可能會產生多個實例!!

下面列舉幾個常用的方法:

1.使用synchronized 關鍵字

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package singleton;
 
public class SingleTon1 {
   
   
  private SingleTon1(){
     
  }
 
  private static SingleTon1 instance = null;
   
  //多線程問題解法一,但是效率不高!因為每次調用都會加鎖!
  public static synchronized SingleTon1 getInstance(){
    if(instance == null){
      instance = new SingleTon1();
    }
    return instance;
  }
  public void print(){
    System.out.println("thread_id:"+Thread.currentThread().getId());
  }
   
  private static Object object = new Object();
  //很巧妙的方法,只有在null的時候加鎖,之后就不加啦
  public static SingleTon1 getInstance2(){
     
    if(instance == null){
      synchronized (object){
        instance = new SingleTon1();
      }
    }
    return instance;
  }
 
}

 2.加鎖

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package singleton;
 
import java.util.concurrent.locks.ReentrantLock;
 
public class SingleTon2 {
   
  private SingleTon2(){
     
  }
  private static ReentrantLock lock = new ReentrantLock();
  private static SingleTon2 instance = null;
   
   
  public void print(){
    System.out.println("thread_id:"+Thread.currentThread().getId());
  }
   
  public static SingleTon2 getInstance2(){
     
    if(instance == null){
      lock.lock();
      if(instance == null){ //注意這里還要判斷下!!
        instance = new SingleTon2();
      }
      lock.unlock();
    }
    return instance;
  }
}

  3.利用靜態變量:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package singleton;
 
 
public class SingleTon3 {
   
  public static void print(){
    System.out.println("thread_id:"+Thread.currentThread().getId());
  }
   
  public static Nested getNested(){
   
    return Nested.instance;
  }
  //這個是單例創建的類
  static class Nested{
   private Nested(){
    }
  static Nested instance = new Nested();
  }
}

以上就是常用的創建單例的模式:

Test測試代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package singleton;
 
import singleton.SingleTon3.Nested;
 
public class Test2 {
 
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Nested singleton;
    Myrunnable mm = new Myrunnable();
    Myrunnable m1 = new Myrunnable();
     
    Myrunnable2 m2 = new Myrunnable2();
    new Thread(m1).start();
    new Thread(m2).start();
    if(m1.singleton == m2.singleton){ //是同一個
      System.out.println("是同一個");
    }else{
      System.out.println("不是同一個");
    }
   }
}
  class Myrunnable implements Runnable{
    Nested singleton;
      @Override
      public void run() {
        // TODO Auto-generated method stub
        singleton = SingleTon3.getNested();
        SingleTon3.print();
      }
  }
   
  class Myrunnable2 implements Runnable{
    Nested singleton;
    @Override
    public void run() {
      // TODO Auto-generated method stub
      singleton = SingleTon3.getNested();
      SingleTon3.print();
    }
  }

輸出:

是同一個

thread_id:11
thread_id:10

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://www.cnblogs.com/jycboy/p/5892185.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费精品一区二区三区在线观看 | 草莓视频在线免费观看 | 亚洲免费闲人蜜桃 | 丝瓜秋葵番茄绿巨人在线观看 | 四虎免费看黄 | 描写细腻的高h肉 | 69天堂网 | 四虎精品成人免费观看 | 黑帮少爷爱上我第8集最新 荷兰精品女人性hd 和日本免费不卡在线v | 精品一区二区三区在线成人 | 24adc年龄18岁欢迎大驾光临 | 娇喘嗯嗯 轻点啊视频福利 九九九九在线精品免费视频 | 日本一区二区三区视频在线观看 | 深夜视频在线播放 | 荡娃艳妇系列小说 | 国模大胆一区二区三区 | 四虎成人影院网址 | www视频免费观看 | 日韩精品一区二区三区毛片 | 国产精品短视频 | 精品一久久香蕉国产线看播放 | 韩国黄色网址 | 91大神大战高跟丝袜美女 | caoporen在线视频入口 | 四虎影视紧急入口地址大全 | 天天摸天天爽视频69视频 | 精品人伦一区二区三区潘金莲 | 久久久久久久久女黄9999 | 精品一区二区三区五区六区 | 日本68xxxxxxxxx59 日本 视频 在线 | 美女撒尿部位无遮挡 | 亚洲美洲国产日产 | 免费看国产精品久久久久 | 男人在女人下面狂躁 | 久草在线福利视频在线播放 | 99久久综合| 性色香蕉AV久久久天天网 | 亚洲国产精品日韩高清秒播 | 国内精品久久久久久久 | 欧美亚洲国产综合在线 | 色漫在线观看 |