单例的作用第一、控制资源的使用,通过线程同步来控制资源的并发访问;
第二、控制实例产生的数量,达到节约资源的目的。
第三、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。
举例:公司打印机只有一台,多个员工连接打印机要打印文件,当员工们同时发送文件给打印机时,打印机只能一次打印一个人的文件,其他员工的文件则被设为等待中。三要素:
1,单例必须私有化构造器--防止外部调用
2,,必须自己创建自己的唯一实例
3,单例必须给所有其他对象提供这一实例。
单例分为饿汉式,懒汉式,静态内部类式,枚举式
代码:
// 静态内部类--属于懒汉式--最好的---声明一个内部类--他是线程安全的
public class SingletonTest{
private static class SingletonObj{
private static SingletonObj singletonObj = new SingletonObj();
}
public static SingletonObj getObj(){
return SingletonObj.singletonObj;
}
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
SingletonObj obj = getObj();
System.out.println(obj.hashCode());
}
}).start();
}
}