java.util.Timer

  • Timer就是个中介者,协调各种TimerTask的工作,各种TimerTask维护在queue中;
public class Timer {private final TaskQueue queue = new TaskQueue();    private void sched(TimerTask task, long time, long period) {if (time < 0)throw new IllegalArgumentException("Illegal execution time.");// Constrain value of period sufficiently to prevent numeric// overflow while still being effectively infinitely large.if (Math.abs(period) > (Long.MAX_VALUE >> 1))period >>= 1;synchronized(queue) {if (!thread.newTasksMayBeScheduled)throw new IllegalStateException("Timer already cancelled.");synchronized(task.lock) {if (task.state != TimerTask.VIRGIN)throw new IllegalStateException("Task already scheduled or cancelled");task.nextExecutionTime = time;task.period = period;task.state = TimerTask.SCHEDULED;}queue.add(task);if (queue.getMin() == task)queue.notify();}}}

B08 中介者模式 JDK源码分析相关推荐

  1. Java的三种代理模式完整源码分析

    Java的三种代理模式&完整源码分析 Java的三种代理模式&完整源码分析 参考资料: 博客园-Java的三种代理模式 简书-JDK动态代理-超详细源码分析 [博客园-WeakCach ...

  2. 【JDK】JDK源码分析-CountDownLatch

    概述 CountDownLatch 是并发包中的一个工具类,它的典型应用场景为:一个线程等待几个线程执行,待这几个线程结束后,该线程再继续执行. 简单起见,可以把它理解为一个倒数的计数器:初始值为线程 ...

  3. 【JDK】JDK源码分析-HashMap(1)

    概述 HashMap 是 Java 开发中最常用的容器类之一,也是面试的常客.它其实就是前文「数据结构与算法笔记(二)」中「散列表」的实现,处理散列冲突用的是"链表法",并且在 J ...

  4. JDK源码分析(2)LinkedList

    JDK版本 LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作. LinkedList 实现 ...

  5. StringBuffer类【JDK源码分析】

    StringBuffer类[JDK源码分析] 前言 推荐 说明 StringBuffer类 基本信息 属性 构造方法 部分方法 length capacity append insert revers ...

  6. JDK源码分析 NIO实现

    总列表:http://hg.openjdk.java.net/ 小版本:http://hg.openjdk.java.net/jdk8u jdk:http://hg.openjdk.java.net/ ...

  7. 【jdk源码分析】ArrayList的size()==0和isEmpty()

    先看结果 分析源码 [jdk源码解析]jdk8的ArrayList初始化长度为0 java的基本数据类型默认值 无参构造 size()方法 isEmpty()方法 转载于:https://www.cn ...

  8. jdk源码分析书籍 pdf_如何阅读源码?

    点击上方"IT牧场",选择"设为星标" 技术干货每日送达! 阅读源码是每个优秀开发工程师的必经之路,那么这篇文章就来讲解下为什么要阅读源码以及如何阅读源码. 首 ...

  9. jdk源码分析书籍 pdf_什么?Spring5 AOP 默认使用Cglib?从现象到源码深度分析

    推荐阅读: 阿里工作十年拿下P8,多亏了这些PDF陪我成长(Spring全家桶+源码解析+Redis实战等)​zhuanlan.zhihu.com 从入门到熟悉,一步一步带你了解 MySQL 中的「索 ...

最新文章

  1. 实战|C++在vscode上的调试配置
  2. 浅谈.NET(C#)与Windows用户账户信息的获取
  3. Exchange2010恢复已禁用邮箱后用户登录会出错
  4. 量化金融第一步获取市场数据 (Python Tushare)
  5. c++ namespace_c++语法2、c执行命名空间输入输出
  6. JavaScript DOM 编程艺术 公用方法
  7. (转)为Spring集成的Hibernate配置二级缓存
  8. 【MySQL】sql语句中exists和in有何区别?
  9. javascript 中的深复制 和 其实现方法
  10. 播放内核的“瘦身”,你只需要这样做!
  11. winform程序的皮肤问题
  12. java map 教程_Map和Set
  13. 如何实现python连续输入
  14. 陪集编码(Coset coding)
  15. SDL游戏开发之七-虚拟摇杆
  16. FileUpload文件上传控件
  17. 怎么用计算机打出音乐符号,音乐符号怎么打出来(所有)
  18. 渗透测试抓包工具-wireshark
  19. 介绍一下什么是静态独享代理ip。
  20. Spring aop报错:com.sun.proxy.$Proxyxxx cannot be cast to yyy

热门文章

  1. 高通WLAN框架学习(24)-- SIFS(Short inter-frame space) bursting
  2. 【主题演讲】程序员,不是码农
  3. ubuntu 14.04 截屏快捷键
  4. 瑞昱rtl8189fs自适应测试
  5. Qt QTableView表格排序
  6. Windows平台C++ 启用和禁用设备
  7. Solaris 10 系统禁用服务
  8. 支付宝钱包客户端技术架构
  9. 遭遇 my.exe,svch0st.exe,iexpl0re.exe,rundl13a.exe,LgSym.dll 等
  10. [烹饪成就]BL特有烹饪配方