饿汉式:
/**
* 饿汉式单例模式
*/
public class Student {
//为了不让被外部初始化这个实例---用private修饰构造函数
private Student(){
}
//实例化一个对象
private static Student s = new Student();
//提供一个公共的访问方法
public static Student getInstance(){
return s;
}
public void study(){
System.out.println("学生学习");
}
}
懒汉式:
/**
* 懒汉式单例模式
*/
public class Teacher {
private Teacher(){
}
private static Teacher t = null;
public static Teacher getInstance(){
if (t == null) {
t = new Teacher();
}
return t;
}
}
注:懒汉式单例模式:
特点:延迟加载思想
缺点:多线程问题--------解决方案:在getInstance()方法前加上synchronized关键字
使得同一时刻只能被一个线程访问
在实际开发中多用到饿汉式单例模式:举例:java API中Runtime类即用到了饿汉式单例模式 如下:
public class Runtime {
private static Runtime currentRuntime = new Runtime();
public static Runtime getRuntime() {
return currentRuntime;
}
private Runtime() {}
}
在面试中,提问的则是懒汉式单例模式----------延迟加载和多线程问题