《Java多线程编程核心技术》(四)

定时器(Timer)

定时/计划功能在移动开发领域使用比较多,比如Android技术。定时/计划任务功能在Java中主要使用Timer对象,它在内部使用多线程的方式进行处理。

  • 如何实现指定时间执行任务
  • 如何实现按指定周期执行任务

定时器Timer的使用

  • 方法schedule(TimerTask task,Date time)的使用:该方法的作用是在指定的日期执行一次任务。
  • 方法schedule(TimerTask task,Date firstTime,long period)的使用:该方法的作用是在指定的日期之后,按指定的时间间隔周期性的无限循环的执行某一任务。
  • 方法schedule(TimerTask task,long delay)的使用:该方法的作用是以执行schedule(TimerTask task,long delay)方法当前的时间为参考,在此时间的基础上延迟指定的毫秒数后执行一次task任务。
  • 方法scheduleAtFixedRate(TimerTask task,Date firstTime,long period)的使用:方法schedule和scheduleAtFIxedRate的区别在于是否延时,使用schedule方法,如果执行任务的时间没有被延时,那么下一次执行任务的时间参考的是上一次任务的开始时时间,使用scheduleAtFixedRate方法,如果执行任务的时间没有被延时,那么执行下一次任务的时间参考的是上一次任务结束时的时间。如果延时的话,两种方式都是以上一次任务结束的时间为标准计算。

单例模式与多线程

立即加载/“饿汉模式”

立即加载就是使用类的时候已经将对象创建完毕。常见的方法就是直接new实例化。
立即加载/“饿汉模式”是在调用方法前,实例已经被创建了。

延迟加载/“懒汉模式”

延迟加载就是在调用get()方法时实例才被创建,常见的实现办法就是在get()方法中进行new实例化。
在“懒汉模式”中,多线程可能会造成创建多个实例的结果,即线程不安全。可通过加synchronized关键字或者在创建实例的方法处添加同步代码块实现线程安全,但是效率低下。可以使用DCL双检查锁机制来实现多线程环境中延迟加载单例设计模式。即对实例对象添加volatile关键字以及在实例化的地方添加同步代码块。

  • 使用静态内置类实现多线程单例模式
  • 使用static代码块实现多线程单例模式
  • 使用枚举类实现多线程单例模式
发布了12 篇原创文章 · 获赞 5 · 访问量 9954

猜你喜欢

转载自blog.csdn.net/weixin_44532540/article/details/103682203