线程池相关/queue

timer原理:https://www.cnblogs.com/yougewe/p/9729043.html

通过不断的轮循来处理的。

Java提供Timer和ScheduledThreadPoolExecutor两个类实现定时任务,其中Timer简单易用,但所有任务都是由同一个线程来调度,任务串行执行,任务之间存在互相干扰,

一是前一个任务的延迟会导致后面的任务延迟,源码如下:schedule与scheduleAtFixedRate区别

queue.rescheduleMin( task.period<0 ? currentTime - task.period : executionTime + task.period);

二是前一个任务异常导致后面的任务不再执行,如果执行时间大于period,schedule则会在任务完成后,经过period再执行新一次任务;而scheduleAtFixedRate就是保持不变的执行间隔。于是,新任务立马执行!所以,scheduleAtFixedRate的执行间隔变为每次任务执行完再执行新的一次。

三是Timer执行周期任务时依赖系统时间,如果当前系统时间发生变化(使用的是 System.currentTimeMillis()),执行行为也会出现变化。

相关queue,最小堆!!!: https://blog.csdn.net/zhangzhetaojj/article/details/81014408

注意的是,nanoTime和系统时间是完全无关的(之前一直以为只是时间戳的纳秒级粒度)

(Timer和ScheduledThreadPoolExecutor的区别https://www.jianshu.com/p/25eea3863d14

各类queue分析

java这里有这么多queue, 是应该分析学习下各个的不同

 

  • ConcurrentLinkedQueue: 一个由链表结构组成的非阻塞队列
  • ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列
  • LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列
  • PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列
  • DelayQueue:一个使用优先级队列实现的无界阻塞队列
  • SynchronousQueue:一个不存储元素的阻塞队列
  • LinkedTransferQueue:一个由链表结构组成的无界阻塞队列
  • LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列

待续。。。

=========

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值