Spring计划的任务和BlockingQueue.take()调用

时间:2019-06-05 13:12:23

标签: java spring blockingqueue spring-scheduled

我有2个使用Spring @Scheduled批注的任务

FROM python:3.6-slim

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONBUFFERED 1

RUN mkdir /back
COPY requirements.txt /back/
RUN pip install -r /back/requirements.txt
COPY . /back/

@Scheduled(initialDelay = 5000, fixedDelay = 15000)
    public void diffuserProchainADiscuter() {
    helper.waitAndFusionne(aTraiter);
    // some other stuff
}

在Helper类中,有一个包含以下内容的被调用方法:

@Scheduled(initialDelay = 14, fixedRate = 30)
    public void diffuserAmdtsEtTextes() {
    // more stuff
}

代码在CentOS的Tomcat 7服务器上运行。

启动服务器时,将执行一次differiderProchainADiscuter(),然后启动differiderAmdtsEtTextes(),并且再也不会返回,因为infosDernierVote为空,因此任务正在等待将某些数据插入到BlockingQueue中。奇怪的行为是另一个计划任务没有再执行,我不明白为什么。当我注释掉private static BlockingQueue<InfoVote> infosDernierVote = new LinkedBlockingQueue<InfoVote>(); public static void waitAndDrainInfoDernierVote(Collection<InfoVote> infoVotes) throws InterruptedException{ //noinspection EmptyCatchBlock if (infoVotes.size() == 0) infoVotes.add(infosDernierVote.take()); infosDernierVote.drainTo(infoVotes); } 时,其他任务每次都应该执行得很好。我想念什么?

0 个答案:

没有答案