1、单例模式:
确保某一个类只有一个实例对象,并提供一个全局的访问点。
特点:
1、只有一个实例
2、自我实例化
3、提供全局访问点
优点:
节约系统资源,提高系统效率,同时也能控制客户对他的访问,但是扩展起来比较困难。
代码实例:
1、饿汉模式
public class Student {
private String name;
private Integer old;
//饿汉模式 天生线程安全
private static Student student = new Student();
public static Student getInstance(){
return student;
}
}
2、懒汉模式
public class Student1 {
private static Student student = null;
/**
* 懒汉模式,这种是线程不安全的
* @return
*/
private static Student getInstance(){
if(student==null){
student = new Student();
}
return student;
}
}
3、线程安全的懒汉模式
public class Student1 {
private static Student student = null;
/**
* 懒汉模式,这种是线程安全的 家了一把锁
* @return
*/
private static synchronized Student getInstance(){
if(student==null){
student = new Student();
}
return student;
}
}
5、加双重锁
public class Student1 {
/**
* 懒汉模式,这种是线程安全的 加双重锁,这里修饰的变量必须
* 要有volatile修饰
* @return
*/
private volatile static Student student = null;
private static synchronized Student getInstance(){
//这里加了两层锁,第一层是判断实例是否存在,不存在进入下面同步块
if(student==null){
synchronized (Student.class){
//再一次判断,如果为空才进行实例的创建
if(student==null){
student = new Student();
}
}
}
return student;
}
}