一,单例模式:(也叫单链,单态)

单例模式指的是在应用整个生命周期内只能存在一个实例。单例模式是一种被广泛使用的设计模式。他有很多好处,能够避免实例对象的重复创建,减少创建实例的系统开销,节省堆内存空间。

实现方式:

1:构造器私有化

2:对外提供公有的唯一一份实例对象

单例模式在单线程环境下的两种经典实现:饿汉式 和懒汉式,但是饿汉式是线程安全的,而懒汉式是非线程安全的。

1,饿汉式:所谓饿汉模式就是立即加载,一般情况下再调用getInstance方法之前就已经产生了实例,也就是在类加载的时候已经产生了。这种模式的缺点很明显,就是占用资源,当单例类很大的时候,其实我们是想使用的时候再产生实例。因此这种方式适合占用资源少,在初始化的时候就会被用到的类。

如下图,p和p1是同一个堆内存下的对象,说明单例模式确实减少了堆内存空间的开辟。

java代码实现单线程 java 线程单例_守护线程


2,懒汉式:懒汉模式就是延迟加载,也叫懒加载。在程序需要用到的时候再创建实例,这样保证了内存不会被浪费。

java代码实现单线程 java 线程单例_单例模式_02


注意:饿汉式在我们多线程底下没有问题,然而懒汉式在多线程底下是有问题的!有些实现方式是线程不安全的,也就是说在多线程并发的环境下可能出现资源同步问题。为了让他资源同步,我们需要给它加锁

java代码实现单线程 java 线程单例_饿汉式_03


二,守护线程:守护线程守护其他线程,当其他线程运行结束时,守护线程也会结束,最典型的是gc。gc就是main方法的守护线程,main方法执行完毕后,gc也就完了。

java代码实现单线程 java 线程单例_守护线程_04


运行结果:相当于把TT线程设置成main的守护线程

java代码实现单线程 java 线程单例_java代码实现单线程_05