gpt4 book ai didi

java - 在 Spring 中实现调度程序

转载 作者:行者123 更新时间:2023-12-01 14:09:34 26 4
gpt4 key购买 nike

项目需要发生以下场景:

A 类 有一些对象(动态创建),它会生成这些对象以及与每个对象关联的时间间隔。该类仅需要在此时间间隔之后生成的对象。我需要实现一种机制,在关联的时间间隔后为类提供对象。有时,它也可能在时间间隔到期之前需要特定的对象。

这就是我所做的:

  • 已查看 ConcurrentTaskExecutororg.springframework.scheduling.concurrent但没有发现它有用,因为我不希望每个对象运行数千个线程。另外,我不想在一段时间间隔后重复特定的作业。

  • 我创建了一个线程B,它获取队列中的所有对象,有一个无限循环,不断检查所有对象的时间间隔与当前时间,如果时间间隔尚未过期,则放回原处。

    while (true) {
    timerObject = queue.take();
    if (timerObject.getEndTime() < System.currentTimeMillis()) {
    //Do something
    } else {
    queue.put(timerObject);
    }
    try {
    Thread.sleep(10);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }

这本身并不是一个非常有效的实现。它有一个与之相关的逻辑错误。当对象数量非常少(如 1 或 2)时,对象不在队列中,每当我尝试从队列中删除对象时,它都会显示不成功,因为 while 循环是始终拥有该对象。因此我不得不 sleep 来避免这种情况。当队列大小增长到 10K 左右时,我不想检查每个时间间隔

有没有简单有效的方法来实现这个解决方案。任何帮助表示赞赏。

最佳答案

您可以使用ConcurrentTaskScheduler ,或者使用 DelayQueue 实现类似的东西。您可以将它与 spring 的并发框架(例如子类 ThreadPoolExecutorFactoryBean )或核心 java Executors 一起使用。

关于java - 在 Spring 中实现调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18630545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com