第三次学JAVA再学不好就吃翔(part117)--单例设计模式
第三次学JAVA再学不好就吃翔(part117)--单例设计模式
学习笔记,仅供参考,有错必纠
文章目录
多线程
单例设计模式
饿汉式
懒汉式
第三种格式
Timer类
线程的五种状态
单例设计模式
单例设计模式,即保证类在内存中只有一个对象,如何保证类在内存中只有一个对象呢:
控制类的创建,不让其他类来创建本类的对象;
在本类中定义一个本类的对象;
提供本类对象的公共访问方式。
饿汉式
class Singleton {
//1,私有构造方法,其他类不能访问该构造方法了
private Singleton(){}
//2,创建本类对象
private static Singleton s = new Singleton();
//3,对外提供公共的访问方法
public static Singleton getInstance() {//获取实例
return s;
}
}
懒汉式
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;
}
}
第三种格式
class Singleton {
//1,私有构造方法,其他类不能访问该构造方法了
private Singleton(){}
//2,声明一个引用
public static final Singleton s = new Singleton();
}
举个例子
单例设计模式:
package com.guiyang.restudy3;
public class D5GetThreadObject {
public static void main(String[] args) {
Singleton s1 = Singleton.s;
Singleton s2 = Singleton.s;
System.out.println(s1 == s2);
}
}
class Singleton {
//1,私有构造方法,其他类不能访问该构造方法了
private Singleton(){}
//2,声明一个引用
public static final Singleton s = new Singleton();
}
控制台输出:
true
Timer类
Timer类是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
构造方法
public Timer()
创建一个新计时器,相关的线程不作为守护程序运行。
方法
public void schedule(TimerTask task, Date time)
安排在指定时间执行指定任务。如果此时间已过去,则安排立即执行该任务。
public void schedule(TimerTask task, Date firstTime, long period)
安排指定任务在指定时间开始进行重复的固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
举个例子
JAVA代码:
package com.guiyang.restudy3;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class D5GetThreadObject {
public static void main(String[] args) throws InterruptedException {
Timer t = new Timer();
//在指定时间安排指定任务
//第一个参数,是安排的任务,第二个参数是执行的时间,第三个参数是过多长时间再重复执行
t.schedule(new MyTimerTask(), new Date(120, 8, 26, 10, 13, 0), 3000);
while(true) {
Thread.sleep(1000);
System.out.println(new Date());
}
}
}
/*public Date(int year,
int month,
int day)已过时。 使用构造方法 Date(long date) 替代
构造一个使用给定 year、month 和 day 初始化的 Date 对象。
如果给定参数超出范围,则结果是不确定的。
参数:
year - year 减去 1900,它必须是 0 到 8099 之间的数。(注意,8099 是由 9999 减去 1900 得到的。)
month - 0 到 11 之间的数
day - 1 到 31 之间的数
hrs - 0-23之间的小时数
min - 0-59之间的分钟数
sed - 0-59之间的秒数*/
class MyTimerTask extends TimerTask {
@Override
public void run() {
System.out.println("背6级单词!!!");
}
}
线程的五种状态
第三次学JAVA再学不好就吃翔(part117)--单例设计模式相关教程
java的数组
java的数组 java的数组 数组 java内存分析 三种初始化 静态初始化:具体的集合进行赋值的初始化 动态初始化:创建容量,然后对容量里面的具体值进行赋值 数组的四个基本特点 数组边界 二维数组 数组 数组是相同类型的数据的有序集合。{ , ,} 首先必须声明数
基于java实现的宿舍管理系统jsp+MySQL+servlet学生宿舍管理系统
基于java实现的宿舍管理系统,jsp+MySQL+servlet学生宿舍管理系统 基于java实现的宿舍管理系统,jsp+MySQL+servlet学生宿舍管理系统 感兴趣的朋友可以家 3070830895 概况 包括视频教学 第二讲:实现登录页面设计。 第三讲:验证码实现及登录功能设计。 第四
Java为什么需要包装类
Java为什么需要包装类? Java为什么需要包装类? Java是面向对象的语言,但并不是“纯面向对象”的,因为我们经常用到的基本数据类型就不是对象。但是我们在实际应用中经常需要将基本数据转化成对象,以便于操作。比如:将基本数据类型存储到Object[]数组或
java基础--JDK安装环境变量配置工具开发第一个程序数据类型运算
java基础--JDK安装、环境变量配置、工具开发第一个程序、数据类型、运算符 **-----Java基础大纲-----** **-----本章节-----** 1.Java语言的历史、特点及工作原理 2.JRE和JDK的介绍 3.Java运行环境和开发工具 4.Java基础语法 **-----下一章节-----** 5.条件语
JavaSE学习笔记(八)(collection..)
JavaSE学习笔记(八)(collection..) 1 .数组长度是固定的,集合长度是可以改变的 2 .数组存储的是同一类型的元素,可以存储基本数据类型,也可以存储对象, 集合只能存储对象。对象类型可以不一致。 int[] arr = new int[10]; Student [] arr = new Studen
【Java】java JMX之ObjectName
【Java】java JMX之ObjectName 1.概述 转载:https://blog.csdn.net/yunlong34574/article/details/46563187 ObjectName 就是存储了一个 domain(域) 下的一些属性,属性的存储采取 key-value 的方式来存储,这个类的一个精华所在就是 domian 及属性(key或者v
java构建聚合项目
java构建聚合项目 一、创建taotao-parent 此工程不会写任何代码,仅仅用来管理整个项目的依赖版本和插件信息(会配置pom),并不是主工程 project xmlns=http://maven.apache.org/POM/4.0.0 xmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexsi:schemaLo
《javascript语言精粹》读书笔记(四)
《javascript语言精粹》读书笔记(四) 为什么80%的码农都做不了架构师? 本篇对这本书的附录进行摘要。 附录A:糟粕 A.1全局变量 全局变量是javascript所有糟糕特性中最糟糕的。 全局变量是在所有作用域中均可见的变量。如果某些全局变量碰巧和子程序中的变