定时器Timer、多线程下的单例模式

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

  在java中Timer主要负责计划任务的功能即在指定的时间开始执行某个任务。TimerTask是一个抽象类负责封装定时任务。

1、定时器Timer的使用

    schedule(TimerTask task, Date date)在指定的日期执行一次task。

    schedule(TimerTask task, Date date, long period)在指定的日期date之后按照period周期无限循环执行task

    TimerTask类中的cancel方法是将从任务队列中将任务自身移除。

     Timer类的cancel方法是将任务队列中的全部任务进行清空需要抢到任务队列的锁之后才能进行清理。

    schedule(TimerTask task, long delay)以当前时间为基准延迟delay的毫秒数后执行一次task。

    schedule(TimerTask task, long delay, long period)以当前时间为基准延迟delay的毫秒数后再以period为周期周期性执行task。

    scheduleAtFixedRate(TimerTask task, Date firstTime, long period)以firstTime为基准以period为周期周期性执行task。

    定时器任务不一定准时执行有可能时到达指定时间后cpu被其他线程的同步区域占用。这时待获得cpu执行时间片段后才会执行定时任务。如果定时时间比当前时间早定时任务会立即执行。

2、单例模式

volatile+double-check+延迟加载方式

public class Singlton {
private volatile static Singlton instance;
private Singlton() { }
/**
* DCL双检查锁机制的延迟加载单例
* @return
*/
public static Singlton getInstance() {
if(instance!=null) {
}else{
synchronized(Singlton.class) {
if(instance==null) {
instance=new Singlton();
}
}
}
return instance;
}
}

内置类方式

public class Singlton {
private static class SingltonHandler {
private static Singlton instance=new Singlton();
}
private Singlton() {}
/**
* 静态内置类实现单例模式
* @return
*/
public static Singlton getInstance() {
return SingltonHandler.instance;
}
}

内置类+序列化和反序列化方式

import java.io.ObjectStreamException;
import java.io.Serializable;

public class Singlton implements Serializable{
private static final long serialVersionUID = -7197411174599222772L;

private static class SingltonHandler {
private static Singlton instance=new Singlton();
}
private Singlton() {}
/**
* 静态内置类实现单例模式
* @return
*/
public static Singlton getInstance() {
return SingltonHandler.instance;
}
/*
* 保证了单例模式下单态对象序列化和反序列化之后仍然维持一致
*/
protected Object readResolve() throws ObjectStreamException{
return SingltonHandler.instance;
}
}

静态块方式

public class Singlton {
private static Singlton instance;
private Singlton() {}
static {
instance=new Singlton();
}
/**
* 静态代码块实现单例模式
* @return
*/
public static Singlton getInstance() {
return instance;
}


}

枚举方式

//枚举类型本身是final的不允许被继承
public enum Singlton {
INSTANCE;
Singlton() {}
/**
* 枚举类型的实现
* @return
*/
public static Singlton getInstance() {
return INSTANCE;
}


}

延迟加载+枚举内置方式

public class Singlton {
private Singlton() {}
private enum EnumHolder{
INSTANCE;
private Singlton singlton;
EnumHolder(){
this.singlton=new Singlton();
}
private Singlton getSinglton() {
return this.singlton;
}
}
/**
* 枚举类型的实现
* @return
*/
public static Singlton getInstance() {
return EnumHolder.INSTANCE.getSinglton();
}

}

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“定时器Timer、多线程下的单例模式” 的相关文章

【云原生之Docker实战】使用docker部署Pingvin Share文件共享平台

【云原生之Docker实战】使用docker部署Pingvin Share文件共享平台 一、Pingvin Share介绍 1.Pingvin Share简介 2.Pingvin Share特点 二、检查本地docker环境...

SpringBoot中怎么整合Ehcache实现热点数据缓存 - 开发技术

本篇内容介绍了“SpringBoot中怎么整合Ehcache实现热点数据缓存”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、简介EhCache 是一个纯 Java 的...

pselect函数

#include<sys/select.h> #include<signal.h> #include<time.h> int pselect(int maxfdp1,fd_set *readset,fd_set *writ...

Elasticsearch数据重新索引

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.htmlPOST _reindex { "source": { "index": "twitter" }, "dest": {...

SEERC 2006 / UVa 1121 Subsequence (有和下界的最短连续子序列)

1121 - SubsequenceTime limit: 3.000 secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=460&page=show_pr...

Java单例模式复习(二)

心血来潮,在学学单例模式,以下是代码块,延迟加载的单例的执行,实现代码如下:package singleton; /** * 延迟加载的单例的执行 * @author Administrator * */ public class SingletonLazy { private...