• java中的单例设计模式


    单例模式有一下特点:
      1、单例类只能有一个实例。
      2、单例类必须自己自己创建自己的唯一实例。
      3、单例类必须给所有其他对象提供这一实例。

      单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。正是由于这个特 点,单例对象通常作为程序中的存放配置信息的载体,因为它能保证其他对象读到一致的信息。例如在某个服务器程序中,该服务器的配置信息可能存放在数据库或 文件中,这些配置数据由某个单例对象统一读取,服务进程中的其他对象如果要获取这些配置信息,只需访问该单例对象即可。这种方式极大地简化了在复杂环境 下,尤其是多线程环境下的配置管理,但是随着应用场景的不同,也可能带来一些同步问题。    

      单例模式:
            饿汉式:类一加载就创建对象
            懒汉式:用的时候,采取创建对象


        1.懒加载思想,延迟加载用的时候采取加载
        2.线程安全问题
            a.是否是多线程模式 是
            b.是否有共享数据 是,就一个对象
            c.是否有多条语句操作共享数据 是在判断对象是否为null是是就创建对象使用在if语句,在该语句执行处有可能被其他线程直接抢到。
    //-------------------------------------------------代码分割线

     1 public class Teacher {
     2     // 构造私有不能创建对象
     3     private Teacher() {
     4 
     5     }
     6 
     7     // 类一加载不再直接创建对象,而是先赋值为null
     8     private static Teacher t = null;
     9 
    10     // 通过方法创建对象
    11     public synchronized static Teacher getTeacher() {
    12         // 假设有三条线程,t1,t2,t3要执行此处的代码块,
    13         if (t == null) {
    14             // 首先t1抢到线程,创建一个对象,此时t2抢到进来后也会创建一个对象,然后t3又抢到了t3也创建了一个对象,单个对象肯定是不符合要求的
    15             // 为了保证创建一次对象后就不在创建对象,对象在创建的时候其它线程是进不来的,,,将方法同步~
    16             t = new Teacher();
    17         }
    18         return t;
    19     }
    20 }

    //下面的类是测试,

    1 public class TeacherDemo {
    2     public static void main(String[] args) {
    3         Teacher t1 = Teacher.getTeacher();
    4         Teacher t2 = Teacher.getTeacher();
    5         System.out.println(t1 == t2); //true,说明是同一个对象
    6         
    7     }
    8 }

    //=====================================//

    //下面的是单利饿汉式

     1 public class Student {
     2     // 构造私有
     3     private Student() {
     4     }
     5 
     6     // 自己造一个
     7     // 静态方法只能访问静态成员变量,加静态
     8     // 为了不让外界直接访问修改这个值,加private
     9     private static Student s = new Student();
    10 
    11     // 提供公共的访问方式
    12     // 为了保证外界能够直接使用该方法,加静态
    13     public static Student getStudent() {
    14         return s;
    15     }
    16 }
     1 /*
     2  * 单例模式:类在内存中只有一个对象
     3  * 如何保证呢?
     4  *             1.构造方法私有
     5  *             2.在成员位置自己创建一个对象
     6  *             3.通过一个公共的方法提供访问
     7  *    在jdk中有一个类Runtime,就是采用单例模式的饿汉式写的。
     8  */
     9 public class StudentDemo {
    10     public static void main(String[] args) {
    11         // 获得对象
    12         // Student s1 = new Student().getStudent();
    13         // Student s2 = new Student().getStudent();
    14         Student s1 = Student.getStudent();
    15         Student s2 = Student.getStudent();
    16         System.out.println(s1 == s2);
    17         System.out.println(s1);
    18         System.out.println(s2);
    19     }
    20 }

    //===========================//

    // Runtime的简单介绍

     1 import java.io.IOException;
     2 
     3 /*
     4  * Runtime类封装了运行时的环境。
     5  * 每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
     6  * 一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,
     7  * 但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。 
     8  * 一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。 
     9  * 常见的应用有
    10  *     1:执行外部程序(调用外部命令)
    11  *     2:内存管理
    12  */
    13 
    14 /**
    15  * 该类的设计模式是饿汉式 
    16  * 每个 Java 应用程序都有一个 Runtime 类实例, 使应用程序能够与其运行的环境相连接。
    17  * 可以通过 getRuntime方法获取当前运行时。
    18  */
    19 public class RuntimerDemo {
    20     public static void main(String[] args) throws IOException {
    21         Runtime r = Runtime.getRuntime();
    22         //r.exec("winmine");
    23         //调用DOS命令执行一些操作。
    24         r.exec("notepad");  //直接在控制台打开记事本
    25         r.exec("shutdown");  //定时关机
    26         
    27     }
    28 }
  • 相关阅读:
    面向对象(6day)
    pycharm使用问题总结
    docker学习(一)ubuntu上安装docker
    docker指令
    docker简单使用
    使用Docker搭建多人使用GPU服务器
    ubuntu常用指令
    高斯滤波
    ubuntu创建个人账户
    第一次使用SSE指令集
  • 原文地址:https://www.cnblogs.com/fuck1/p/5432891.html
Copyright © 2020-2023  润新知