avatar

目錄
我也不知道在写什么

Singleton与Static的区别

1. singleton

  • 单例模式

    • 单例模式,单例模式是一种被广泛使用的设计模式。指的是在应用整个生命周期内只能存在一个实例。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。
  • 单例模式的特点

    • 单例类只能有一个实例。
    • 单例类必须自己创建自己的唯一实例。
    • 单例类必须给所有其它对象提供这一实例。
  • 单例模式的好处

    • 使用单例模式可以限制对象实例的个数,除了返回实例的操作之外不能被new出来。这在某些需要限制对象访问的场合下是有用的。使用static的话并不能限制对象实例的个数。
    • 在很多的操作中,比如说是建立目录、数据库操作等都需要这样的单线程操作。
    • 最显而易见的好处是节约开销,比如数据库单例的好处是,每次你只需要去获取那个数据库的示例就好,不用每次都去创建一个实例。

2. static

  • 静态类
    • 静态类就是一个类里面都是静态方法和静态field,构造器被private修饰,因此不能被实例化。Math类就是一个静态类。
  • 静态类的特点
    • 只包含静态成员。
    • 无法进行实例化。也就是无法使用new运算符创建类类型的变量,因此可以通过类名.变量名直接引用,而不需要new出一个类来
    • 静态方法通常用于创建实用程序函数。不能包含实例构造函数。静态方法的调用直接在类上进行,不能在类的实例上调用。
    • 会进行密封,因此不能继承。 它们不能继承自任何类(除了Object)
  • 静态类的好处
    • static类有更好的效率。
    • 编译器可以进行检查。

3. 区别

  • 静态方法只能直接访问本类中的静态成员(通过实例化对象)可以访问到的其它类中的所有成员(包括静态和非静态)
  • static有更好的访问效率,如果你的singleton不维持任何状态,仅仅是提供全局的访问,这个时候就适合用static,这样速度的也快;
  • 静态类中只能有静态成员,不可以有非静态字段;
  • 单例模式的灵活性更高,方法可以被override,因为静态类都是静态方法,所以不能被override;
  • 单例模式会提供给你一个全局唯一的对象,静态类只是提供给你很多静态方法,这些方法不用创建对象,通过类就可以直接调用;
  • 单例模式最大的好处就是节省内存空间,提高效率,因为他永远都只有一个实例!而static还是有可能被new出多个实例的,而这多个实例在用完之后也许就没用了,还要等待垃圾回收机制来回收,所以效率自然不如单例;
  • 如果是一个非常重的对象,单例模式可以懒加载,静态类就无法做到

什么是进程?

  • 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。

什么是线程

  • 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。

什么是多线程?

  • 多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

多线程的好处:

  • 可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。

多线程的不利方面:

  • 线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
  • 多线程需要协调和管理,所以需要CPU时间跟踪线程;
  • 线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
  • 线程太多会导致控制太复杂,最终可能造成很多Bug。

参考链接:https://www.cnblogs.com/scotth/p/10450891.html

文章作者: Dylan
文章鏈接: https://www.faithlch.com/%E6%88%91%E4%B9%9F%E4%B8%8D%E7%9F%A5%E9%81%93%E5%9C%A8%E5%86%99%E4%BB%80%E4%B9%88.html
版權聲明: 本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Dylan He
打賞
  • 微信
    微信
  • 支付寶
    支付寶

評論