Java 是否可以为方法中的代码块运行cron作业?

Java 是否可以为方法中的代码块运行cron作业?,java,cron,Java,Cron,我有一个方法,我想运行cron作业,或者类似于cron作业的东西(但不是线程,任务计时器,或者类似于那些在我的情况下会占用更多资源的东西),只运行该方法的一小部分 @Override public void notifyUsers(Data data) { // do some stuff with data // want a cron job here doImportantStuff(data); } 通常,我可以设置.xml文件,使整个方法

我有一个方法,我想运行cron作业,或者类似于cron作业的东西(但不是
线程
任务计时器
,或者类似于那些在我的情况下会占用更多资源的东西),只运行该方法的一小部分

  @Override
  public void notifyUsers(Data data) {
    // do some stuff with data
    
    // want a cron job here
    doImportantStuff(data);
  }
通常,我可以设置.xml文件,使整个方法独立运行任务并解决所有问题,但是,此方法依赖于另一个外部服务正在处理的某些其他数据,因此,不幸的是,我依赖于该服务来提供我所需的信息,而由于我们的工作方式和数据组织等原因,我无法在当前的服务中获取这些数据

此外,将在
doImportantStuff()
中完成的工作基本上是迭代对象列表,每个对象都有一个要执行的时间列表(但是只执行一次)。例如,data.list[0]将在30分钟和45分钟内执行(在整个生命周期内,每次执行一次,总共执行2次),其中data.list[1]将在15分钟、30分钟和60分钟内执行(总共执行3次)。对于可变数量的数据,这些时间也将是可变的。(对我来说,使用线程更有意义,但正如我所说,我不能)

我想知道,对于方法中的一块代码,是否有一种方法可以执行cron,或者类似于cron的或“小”到足以在后台运行的cron

我本来打算创建一个新的
线程
,让该线程
doImportantStuff()
,然后睡眠X个时间,但经过进一步调查,我意识到这会占用太多资源,因为理论上,可能会有数百个其他调用此方法,然后他们每个人都创建自己的线程


显然,我不是这方面的专家,因此,如果我对这个主题的理解有误,我深表歉意。

我想您也可以在java中使用
Spring Schedule
。因为春天有这种特点。这很简单,也很有用

@Scheduled(cron = "0 15 10 15 * ?")
public void scheduledMethod(){
    //code..
}


您可以找到更多信息,我想您也可以在java中使用
Spring Schedule
。因为春天有这种特点。这很简单,也很有用

@Scheduled(cron = "0 15 10 15 * ?")
public void scheduledMethod(){
    //code..
}


您可以找到更多信息

不要创建线程。您可以使用具有固定线程数的执行器,并向其提交任务。使用executor启动一个
CompleteableFuture
并等待结果(如果您确实必须等待结果)。但是你真的需要一个后台工作来做事情吗,特别是如果你在那之后阻塞了,你基本上失去了后台线程的好处。@M.Deinum谢谢你的输入。我应该提到的是,我将要处理的数据本质上是一个其他数据的列表,每个数据都有自己的执行时间列表。例如,data1需要在30分钟和45分钟内执行,而data2需要在30分钟和一小时内执行。一旦它们被执行,它们就完成了(这有点违背了cron的目的,但我需要一些“轻”的东西)。为此使用调度执行器和计时器。不要“创建线程”。您可以使用具有固定线程数的执行器,并向其提交任务。使用executor启动一个
CompleteableFuture
并等待结果(如果您确实必须等待结果)。但是你真的需要一个后台工作来做事情吗,特别是如果你在那之后阻塞了,你基本上失去了后台线程的好处。@M.Deinum谢谢你的输入。我应该提到的是,我将要处理的数据本质上是一个其他数据的列表,每个数据都有自己的执行时间列表。例如,data1需要在30分钟和45分钟内执行,而data2需要在30分钟和一小时内执行。一旦它们被执行,它们就完成了(这有点违背了cron的目的,但我需要一些“轻”的东西)。为此使用调度执行器和计时器。正如我上面提到的,我不能使用这个,因为我依赖于正在处理的一些数据,并从另一个服务传入,我不能使用这个,正如我前面提到的,因为我依赖于从另一个服务中处理和传递的数据,而我不能自己处理。