×

单例模式双重校验锁 单例模式 线程

怎么实现一个线程安全的单例模式?什么是多线程编程什么时候使用

admin admin 发表于2022-06-09 14:57:31 浏览107 评论0

抢沙发发表评论

怎么实现一个线程安全的单例模式


设计模式在面试中挺常考的,单例模式是考的最多的。线程安全的单例还有很多种实现方法。可以使用静态内部类、双重校验锁、静态代码块等。

1、饿汉式
public class Singleton(){
    private static Singleton instance = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return instance;
    }
}
2、懒汉式
public class Singleton(){
    private static Singleton instance;
    private Singleton(){}
    public static synchronized Singleton getInstance(){
        if(instance==null){
            instance = new Singleton();
        }
        return instance;
    }
}

什么是多线程编程什么时候使用


多线程的使用主要是用来处理程序“在一部分上会阻塞”,“在另一部分上需要持续运行”的场合。一般是根据需求,可以用多线程,事件触发,callback等方法达到。但是有一些方法是只有多线程能办到的就只有用多线程或者多进程来完成。
举个简单的例子,能理解就行。假设有这样一个程序,
1会不停的处理收到的所有TCP请求。对于每个TCP请求做不同的操作。不能有遗漏
2有很多特定的请求会向一个服务器发送存储的数据,或者是等待用户输入。

来看看。第1个要求很简单。用个while循环就搞定了。但第2个特性呢。一旦在等待用户输入或者是连接服务器时,程序会“阻塞”一段时间,这一段时间内就无法处理其他的TCP请求了。
所以可以利用多线程,每个线程处理不同的TCP请求。这样程序就不会“阻塞”掉了。

进程和线程的区别


进程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.-单例模式

进程和线程的区别

根本区别

  • 进程作为资源分配的单位

  • 线程作为调度和执行的单位

开销

  • 每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。 

  • 线程可以看成时轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。 

所处环境

  • 系统在运行的时候会为每个进程分配不同的内存区域 

  • 除了CPU之外,不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源

分配内存

  • 系统在运行的时候会为每个进程分配不同的内存区域 

  • 除了CPU之外,不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源

包含关系

  • 没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的。 

  • 没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的。