【java】单例设计模式——饿汉式和懒汉式、Runtime、Timer

原创 2018年04月17日 10:24:49

单例设计模式:保证类在内存中只有一个对象

一、饿汉式:

1、私有构造方法:外界就不能创建对象

2、创建本类对象

3、对外提供公共的访问方法

class Singleton {
	//1,私有构造方法,其他类不能访问该构造方法了
	private Singleton(){}
	//2,创建本类对象
	private static Singleton s = new Singleton();
	//3,对外提供公共的访问方法
	public static Singleton getInstance() {				//获取实例
		return s;
	}
}

二、懒汉式:

1、私有构造方法:外界就不能创建对象

2、声明一个引用

3、对外提供公共的访问方法,创建对象

特点:

1、开发时不用:不安全,多线程时可能会创建多个对象

2、面试时用:单例的延迟加载模式

/*
 * 懒汉式,单例的延迟加载模式
 */
/*class Singleton {
	//1,私有构造方法,其他类不能访问该构造方法了
	private Singleton(){}
	//2,声明一个引用
	private static Singleton s ;
	//3,对外提供公共的访问方法
	public static Singleton getInstance() {				//获取实例
		if(s == null) {
			//线程1等待,线程2等待
			s = new Singleton();
		}		
		return s;
	}
}

三、饿汉式和懒汉式的区别

1、饿汉式是空间换时间,一上来就创建对象占用了空间,但是时间快,懒汉式是时间换空间,上来先声明一个引用,然后进行判断浪费了时间

2、在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象


四、第三种单例模式

class Singleton {
	//1,私有构造方法,其他类不能访问该构造方法了
	private Singleton(){}
	//2,声明一个引用
	public static final Singleton s = new Singleton();	
}

五、单例模式举例

1、Runtime类:每个java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。应用程序不能创建自己的Runtime类实例。

可以通过 getRuntimr() 方法返回与当前Java应用程序相关的运行时对象 。

源码:

private static Runtime currentRuntime = newRuntime();
public static Runtime getRuntime() {
       return currentRuntime;
    }
private Runtime() {}

补充:Timer类:一种工具,线程用其安排以后在后台线程中执行的任务,可安排任务执行一次,或者定期重复执行。

void schedule(TimerTask task, Date time):安排在制定的时间执行制定的任务。

void schedule(TimerTask task, Date time,long period):重复的固定延迟执行

    TimerTask类:由Timer安排为一次执行或重复执行的任务,里面有run()方法,放置具体执行任务。

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Demo3_Timer {
	/**
	 * @param args
	 * @throws InterruptedException 
	 */
	public static void main(String[] args) throws InterruptedException {
		Timer t = new Timer();
		//在指定时间安排指定任务
		//第一个参数,是安排的任务,第二个参数是执行的时间,第三个参数是过多长时间再重复执行
		t.schedule(new MyTimerTask(), new Date(188, 6, 1, 14, 22, 50),3000);	
		
		while(true) {
			Thread.sleep(1000);
			System.out.println(new Date());
		}
	}
}

class MyTimerTask extends TimerTask {
	@Override
	public void run() {
		System.out.println("起床背英语单词");
	}
}



版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/love_Aym/article/details/79970674

Dll中导出类--Delphi实战之一

   Dll中导出类--Delphi实战之一作者: Musicwind®创建时间: 2001-11-01~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...
  • Musicwind
  • Musicwind
  • 2001-11-02 21:24:00
  • 1645

设计模式之单例模式-饿汉式&懒汉式

定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。” 通过单例模式可以保证系统中一个类只有一个实例而且该...
  • inslow
  • inslow
  • 2017-01-08 18:24:52
  • 513

单例设计模式之饿汉式和懒汉式

1.设计模式? 设计模式是在大量的实践中总结和理论化之后优选的代码结构,编程风格,以及解决问题的思考方式。 2.单例模式的概念?     单例模式,我们首先必须将类在一个虚拟机中只能产生一个对象...
  • weixin_39039345
  • weixin_39039345
  • 2017-11-23 18:37:43
  • 94

设计模式-单例模式(饿汉式及懒汉式的Java实现)

单例模式单例模式在程序设计中使用的频率非常之高,其设计的目的是为了在程序中提供唯一一个对象(保证只被构造一次),例如写入日志的log对象,windows的任务管理器实现(只能打开一个)。这里主要介绍单...
  • zjx409
  • zjx409
  • 2015-08-03 22:57:41
  • 5683

设计模式-单例模式-饿汉式单例和懒汉式单例

单例模式(Singleton pattern)一个在设计模式中比较简单的模式,我们常说的饿汉式和懒汉式是最常举例的两种写法。如下饿汉式:public class Singleton { privat...
  • oneleo_
  • oneleo_
  • 2017-12-29 15:57:49
  • 56

Java设计模式之单例模式(恶汉式和懒汉式)

/*  * 单例模式:  *         饿汉式:类一加载就创建对象  *         懒汉式:用的时候,才去创建对象  * 面试题:单例模式的思想是什么?写一个代码体现(我们最好写懒...
  • u012110719
  • u012110719
  • 2015-05-02 08:47:38
  • 4023

[设计模式]单例模式(懒汉式和饿汉式)

单例模式(Singleton pattern)定义:一种常见的软件设计模式目的:应用该模式的类一个类只有一个实例。即一个类只有一个对象实例了解了定义和目的后我们先来看一下两种单例模式:1.懒汉式(la...
  • qq_35478489
  • qq_35478489
  • 2017-11-20 19:10:40
  • 108

Java单例模式--饿汉式、懒汉式需要怎么写

Java 单例模式 饿汉 懒汉 spring IOC中使用懒汉式、饿汉式
  • u013905744
  • u013905744
  • 2016-10-07 14:23:31
  • 4027

iOS学习笔记10-设计模式-单例模式(懒汉式,饿汉式)

设计模式有许多中,如观察者模式,单例模式,工厂模式,门面模式,等等。单例模式:1.饿汉式:一进入程序就自动创建一个单例对象,但在移动端不是很适用; 2.懒汉式:当第一次使用到单例对象时,才创建对象;...
  • xiaoluodecai
  • xiaoluodecai
  • 2015-09-13 16:56:45
  • 1126

java单例模型---懒汉式和饿汉式代码及比较

/*单例模型:保证该类中的对象的唯一性  * 1.建立私有静态对象  * 2.不让其他类建立该类对象  * 3.对外提供对对象  */ class simple1{  private s...
  • wangyanxiang0704
  • wangyanxiang0704
  • 2012-12-10 14:40:53
  • 3313
收藏助手
不良信息举报
您举报文章:【java】单例设计模式——饿汉式和懒汉式、Runtime、Timer
举报原因:
原因补充:

(最多只允许输入30个字)