zoukankan      html  css  js  c++  java
  • 10.并发编程--单例模式(饥饿模式-懒汉模式)

    并发编程--单例模式(饥饿模式-懒汉模式)

    1. 单例模式:

    - 最常见的单例模式:饥饿模式-懒汉模式;

    • 1. 饥饿模式:直接实例化对象;
    • 2. 懒汉模式:调用方法时进行实例化对象。

    - 还有一种经典做法:在多线程模式中,一般选择如下几种单例模式:

    • 1. dubble check instance:
    • 2. static inner class:

    示例:Singletion.java --> static inner class:

     1 public class Singletion {
     2 
     3     private static class InnerSingletion {
     4       private static Singletion single = new Singletion();
     5     }
     6 
     7     public static Singletion getInstance(){
     8       return InnerSingletion.single;
     9     }
    10 }

    示例:  dubble check instance:

     1 public class DubbleSingleton {
     2 
     3 private static DubbleSingleton ds;
     4 
     5     public  static DubbleSingleton getDs(){
     6       if(ds == null){
     7         try {
     8           //模拟初始化对象的准备时间...
     9           Thread.sleep(3000);
    10         } catch (InterruptedException e) {
    11           e.printStackTrace();
    12         }
    13         synchronized (DubbleSingleton.class) {
    14           if(ds == null){
    15             ds = new DubbleSingleton();
    16           }
    17         }
    18       }
    19       return ds;
    20     }
    21 
    22     public static void main(String[] args) {
    23       Thread t1 = new Thread(new Runnable() {
    24         @Override
    25         public void run() {
    26           System.out.println(DubbleSingleton.getDs().hashCode());
    27         }
    28       },"t1");
    29       Thread t2 = new Thread(new Runnable() {
    30         @Override
    31         public void run() {
    32           System.out.println(DubbleSingleton.getDs().hashCode());
    33         }
    34       },"t2");
    35       Thread t3 = new Thread(new Runnable() {
    36         @Override
    37         public void run() {
    38           System.out.println(DubbleSingleton.getDs().hashCode());
    39         }
    40       },"t3");
    41 
    42       t1.start();
    43       t2.start();
    44       t3.start();
    45     }
    46 }
  • 相关阅读:
    CCF-CSP认证 C++题解目录
    LeetCode周赛#205
    LeetCode双周赛#34
    Codeforces Round #667 (Div. 3) B、C、D、E 题解
    Codeforces Round #656 (Div. 3) 题解
    牛客小白月赛#26 题解
    LeetCode周赛#204 题解
    LeetCode周赛#203 题解
    牛客小白月赛#27 题解
    N阶上楼梯问题——动态规划(递推求解)
  • 原文地址:https://www.cnblogs.com/Mao-admin/p/9988963.html
Copyright © 2011-2022 走看看