生产者消费者 - 需要在队列满或经过一定时间后处理队列

时间:2017-08-13 02:37:28

标签: java producer-consumer timertask scheduledexecutorservice

我使用Java作为我的编程接口。这是我的工作流程。我有一个生产者谁有一个带路径的文件名,并将其添加到队列。然后是消费它的消费者。出队后我将它添加到arraylist然后检查它是否已达到x的计数。如果是,那么我将处理它。到现在为止还挺好。但问题是我在这个列表中有一个文件。在文件列表达到x大小之前,它不会被处理。我希望有一些计时器可以过去,在y分钟后,我想处理文件列表,如果它不是空的。我该如何实现这一目标?我知道计时器任务,计划执行程序,但它在预定时间后运行一个线程,这不是我的情况。如果您需要,我可以提供更多详细信息。如果我的设计错误,请告诉我,谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

每次尝试出列时,请检查在使用上一个文件时设置的时间戳。如果该时间戳大于您的阈值时间并且您在队列中有n个文件(其中n

伪码:

timestamp <= now
every k milliseconds:
   check the number of files n in queue:
       if n >= x:
           consume the files
           update timestamp (to "now")
       else if (now - timestamp > time-threshold):
           consume the files
           update timestamp (to "now")