B08 中介者模式 JDK源码分析
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源码分析相关推荐
- Java的三种代理模式完整源码分析
Java的三种代理模式&完整源码分析 Java的三种代理模式&完整源码分析 参考资料: 博客园-Java的三种代理模式 简书-JDK动态代理-超详细源码分析 [博客园-WeakCach ...
- 【JDK】JDK源码分析-CountDownLatch
概述 CountDownLatch 是并发包中的一个工具类,它的典型应用场景为:一个线程等待几个线程执行,待这几个线程结束后,该线程再继续执行. 简单起见,可以把它理解为一个倒数的计数器:初始值为线程 ...
- 【JDK】JDK源码分析-HashMap(1)
概述 HashMap 是 Java 开发中最常用的容器类之一,也是面试的常客.它其实就是前文「数据结构与算法笔记(二)」中「散列表」的实现,处理散列冲突用的是"链表法",并且在 J ...
- JDK源码分析(2)LinkedList
JDK版本 LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作. LinkedList 实现 ...
- StringBuffer类【JDK源码分析】
StringBuffer类[JDK源码分析] 前言 推荐 说明 StringBuffer类 基本信息 属性 构造方法 部分方法 length capacity append insert revers ...
- JDK源码分析 NIO实现
总列表:http://hg.openjdk.java.net/ 小版本:http://hg.openjdk.java.net/jdk8u jdk:http://hg.openjdk.java.net/ ...
- 【jdk源码分析】ArrayList的size()==0和isEmpty()
先看结果 分析源码 [jdk源码解析]jdk8的ArrayList初始化长度为0 java的基本数据类型默认值 无参构造 size()方法 isEmpty()方法 转载于:https://www.cn ...
- jdk源码分析书籍 pdf_如何阅读源码?
点击上方"IT牧场",选择"设为星标" 技术干货每日送达! 阅读源码是每个优秀开发工程师的必经之路,那么这篇文章就来讲解下为什么要阅读源码以及如何阅读源码. 首 ...
- jdk源码分析书籍 pdf_什么?Spring5 AOP 默认使用Cglib?从现象到源码深度分析
推荐阅读: 阿里工作十年拿下P8,多亏了这些PDF陪我成长(Spring全家桶+源码解析+Redis实战等)zhuanlan.zhihu.com 从入门到熟悉,一步一步带你了解 MySQL 中的「索 ...
最新文章
- 实战|C++在vscode上的调试配置
- 浅谈.NET(C#)与Windows用户账户信息的获取
- Exchange2010恢复已禁用邮箱后用户登录会出错
- 量化金融第一步获取市场数据 (Python Tushare)
- c++ namespace_c++语法2、c执行命名空间输入输出
- JavaScript DOM 编程艺术 公用方法
- (转)为Spring集成的Hibernate配置二级缓存
- 【MySQL】sql语句中exists和in有何区别?
- javascript 中的深复制 和 其实现方法
- 播放内核的“瘦身”,你只需要这样做!
- winform程序的皮肤问题
- java map 教程_Map和Set
- 如何实现python连续输入
- 陪集编码(Coset coding)
- SDL游戏开发之七-虚拟摇杆
- FileUpload文件上传控件
- 怎么用计算机打出音乐符号,音乐符号怎么打出来(所有)
- 渗透测试抓包工具-wireshark
- 介绍一下什么是静态独享代理ip。
- Spring aop报错:com.sun.proxy.$Proxyxxx cannot be cast to yyy
热门文章
- 高通WLAN框架学习(24)-- SIFS(Short inter-frame space) bursting
- 【主题演讲】程序员,不是码农
- ubuntu 14.04 截屏快捷键
- 瑞昱rtl8189fs自适应测试
- Qt QTableView表格排序
- Windows平台C++ 启用和禁用设备
- Solaris 10 系统禁用服务
- 支付宝钱包客户端技术架构
- 遭遇 my.exe,svch0st.exe,iexpl0re.exe,rundl13a.exe,LgSym.dll 等
- [烹饪成就]BL特有烹饪配方