当前位置: 首页 > 知识库问答 >
问题:

spring @scheduled中的线程保证

何志业
2023-03-14

我有一个包含两个@scheduled方法的类,如下所示。

public class JobExecutor {
    private static final DelayQueue<Job> JOB_QUEUE = new DelayQueue<>();

    @Scheduled
    public void run() {
        Job job = JOB_QUEUE.take();
    }

    @Scheduled 
    public void fillQueue {
       JOB_QUEUE.add(.....);
    }
}

我正在使用一个有20个线程的线程池。现在我使用delayqueue,它是run方法中的阻塞队列。是否有可能所有20个线程都无法读取队列(当队列为空时),而fillqueue方法永远无法执行?

共有1个答案

卫高谊
2023-03-14

否,因为如果没有用于轮询的元素,DelayQueue返回null

 类似资料:
  • 问题内容: Spring提供了使用注释按特定间隔计划和执行任务的可能性,例如 @Scheduled 有一种方便的方法来对该行为进行单元测试吗? 当然,我可以自己调用bean的方法,但是我想确保不会因配置错误等而遇到诸如多次执行之类的问题。 其他框架提供了自己快进时间的可能性。Activiti就是一个例子,你可以在其中致电 加快框架使用的时间。 春天有什么可比的吗? 本质上,我想做的是在单元测试(使

  • 我正在使用一个属性PlaceholderConfigrer在Spring调度注释配置中获取java属性 当没有定义覆盖属性值时,有没有办法指定默认值? Spring 3支持${my.property: defaultValue}语法,但注释上不允许,我试图传递变量,但也不允许,注释属性Scheduled.cron的值必须是常量表达式

  • 问题内容: 我有几种用注释的方法。 在应用程序上下文中,我具有以下注释驱动的设置: 问题是,有时某些方法的执行会延迟几秒钟甚至几分钟。 我假设即使某个方法需要一段时间才能完成执行,其他方法仍会执行。所以我不明白延迟。 有没有办法减少甚至消除延迟? 问题答案: 为了完整起见,以下代码显示了使用java config配置调度程序的最简单方法: 当需要更多控制时,可以实现一个类。

  • 问题内容: 如何为基于Spring的@Scheduled cron作业配置时区? 背景: 我有一份使用Spring的注释每天执行一次的工作,例如下午2点: 问题是2PM在不同服务器之间不同,因为Spring在 内部使用。此外,JavaDoc中的 规定: 获取此主机的默认TimeZone。默认TimeZone的来源可能会因实现方式而异。 换句话说,未确定时区。它可能取决于JVM实现,服务器时区配置,

  • RabbitMQ保证在相同的发布通道- 1.)我有一个单一的线程发布消息在一个单一的交换2.(我有其他线程的集合发布消息在不同的交流有时创造新的消费者为不同的交流 使用缓存连接工厂,它具有通道缓存。每次发布时,它都会进入缓存以获取通道。因为其他线程正在发布和使用,所以不能保证同一通道将被我的主线程用于后续发布。即使我有一个缓存,这也是真的。有人回避过这个问题吗? 理想情况下,我希望为publish