一个有关定时生产与消费的问题
一、前言
本文来讲解遇到的一个有意思的与定时器相关的生产消费模型,模型如下图:
- 生产者是一个定时器线程,使用ScheduledThreadPoolExecutor的scheduleAtFixedRate控制每间隔3s投递一个元素到队列1,2,3(使用offer方法)。比如第1s放入一个元素到队列1,2,3,这时候每个队列里面有一个元素。然后第4s在放入一个元素到队列1,2,3,如果没有消费线程的时候这时候每个队列里面有2个元素.
- 队列为有界阻塞队列(ArrayBlockingQueue),队列元素的大小设置为6个元素。
- 消费者是一个定时器线程,使用ScheduledThreadPoolExecutor的scheduleAtFixedRate控制每间隔1s轮询取出每个队列里面全部元素(使用poll方法)。比如第1s取出队列1里面的全部元素,第2s取出队列2里面的元素,第3s取出队列3里面的元素,第4s取出队列1里面的元素….
并且如果发现当前队列为空则会结束当前s的任务,然后等下1s到了的时候从下一个队列开始取。 - 消费线程启动后,生产线程才启动,生产者和消费者线程优先级相同
- 消费线程和生产线程里面没有耗时操作,或者耗时都不超过1s。这个保证定时器任务不会被延迟执行。
问题:每个队列里面最多时候会有几个元素?