zoukankan      html  css  js  c++  java
  • 单例模式

    java单例模式实现

     1 package chapter02;
     2 
     3 /*
     4  * 使用双检测机制,既保证了不需要同步代码的异步性,又保证了单例的效果
     5  */
     6 public class MyObject {
     7     private volatile static MyObject myobject;
     8     
     9     private MyObject() {
    10         
    11     }
    12     
    13     public static MyObject getInstance() {
    14         
    15         try {
    16             if(myobject != null) {
    17                 
    18             }else {
    19                 Thread.sleep(3000);//模拟在生成对象之前的一些准备性工作
    20                 synchronized (MyObject.class) {
    21                     if(myobject == null) {
    22                         myobject = new MyObject();
    23                     }
    24                 }
    25             }
    26         } catch (InterruptedException e) {
    27             // TODO: handle exception
    28             e.printStackTrace();
    29         }
    30         
    31         return myobject;
    32     }
    33 }
     1 package chapter02;
     2 
     3 public class MyThread extends Thread {
     4 
     5     @Override
     6     public void run() {
     7         // TODO Auto-generated method stub
     8         System.out.println(MyObject.getInstance().hashCode());
     9     }
    10 }
    package chapter02;
    
    public class Run {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            MyThread t1 = new MyThread();
            MyThread t2 = new MyThread();
            t1.start();
            t2.start();
        }
    
    }

    使用静态内置类实现单例模式

    package chapter03;
    
    public class MyObject {
        //内部类实现
        private static class MyObjectHandler{
            private static MyObject myobejct = new MyObject();
        }
        
        public MyObject() {
            
        }
        
        public static MyObject getInstance() {
            return MyObjectHandler.myobejct;
        }
    }
     1 package chapter03;
     2 
     3 public class MyThread extends Thread {
     4 
     5     @Override
     6     public void run() {
     7         // TODO Auto-generated method stub
     8         System.out.println(MyObject.getInstance().hashCode());
     9     }
    10 
    11     
    12 }
     1 package chapter03;
     2 
     3 
     4 public class Run {
     5 
     6     public static void main(String[] args) {
     7         // TODO Auto-generated method stub
     8         MyThread t1 = new MyThread();
     9         MyThread t2 = new MyThread();
    10         t1.start();
    11         t2.start();
    12     }
    13 
    14 }

    使用static代码块实现单例模式

    package chapter04;
    
    public class MyObject {
        private static MyObject instance = null;
        
        private MyObject() {
            
        }
        
        static {
            instance = new MyObject();
        }
        
        public static MyObject getInstance() {
            return instance;
        }
        
    }
    package chapter04;
    
    public class MyThread extends Thread {
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            for (int i = 0; i < 5; i++) {
                System.out.println(MyObject.getInstance().hashCode());
            }
        }
        
    }
    package chapter04;
    
    public class Run {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            MyThread t1 = new MyThread();
            MyThread t2 = new MyThread();
            
            t1.start();
            t2.start();
        }
    
    }

    使用enum枚举数据类型实现单例模式

    package chapter05;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class MyObject {
        public enum MyEnumSingleton{
            connectionFactory;
            private Connection connection;
            private MyEnumSingleton() {
                try {
                    System.out.println("创建MyObject对象");
                    String url = "jdbc:sqlserver://localhost:1079;databaseName=y2";
                    String username = "sa";
                    String password = "";
                    String drivename = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
                    Class.forName(drivename);
                    connection = DriverManager.getConnection(url, username, password);
                    
                    
                } catch (ClassNotFoundException e) {
                    // TODO: handle exception
                    e.printStackTrace();
                } catch (SQLException e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
            }
            
            public Connection getConnection() {
                return connection;
            }
        }
        
        public static Connection getConnection() {
            return MyEnumSingleton.connectionFactory.getConnection();
        }
    }
    package chapter05;
    
    public class MyThread extends Thread {
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            for (int i = 0; i < 5; i++) {
                System.out.println(MyObject.getConnection().hashCode());
            }
        }
        
    }
  • 相关阅读:
    Codeforces 877 C. Slava and tanks
    Codeforces 877 D. Olya and Energy Drinks
    2017 10.25 NOIP模拟赛
    2017 国庆湖南 Day1
    UVA 12113 Overlapping Squares
    学大伟业 国庆Day2
    51nod 1629 B君的圆锥
    51nod 1381 硬币游戏
    [JSOI2010]满汉全席
    学大伟业 2017 国庆 Day1
  • 原文地址:https://www.cnblogs.com/wylwyl/p/10227320.html
Copyright © 2011-2022 走看看