Java 每10分钟调用一个函数

Java 每10分钟调用一个函数,java,scheduling,Java,Scheduling,我不是专家,只是初学者。所以我恳请你为我写一些代码 如果我有两个类,CLASS A和CLASS B,在CLASS B内部有一个名为funb()的函数。我想每隔十分钟从CLASS A调用这个函数 你已经给了我一些想法,但我不太明白 你能发布一些示例代码吗?看看: import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class ClassExecutingTask { lo

我不是专家,只是初学者。所以我恳请你为我写一些代码

如果我有两个类,
CLASS A
CLASS B
,在
CLASS B
内部有一个名为
funb()
的函数。我想每隔十分钟从
CLASS A
调用这个函数

你已经给了我一些想法,但我不太明白

你能发布一些示例代码吗?

看看:

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

public class ClassExecutingTask {

    long delay = 10 * 1000; // delay in milliseconds
    LoopTask task = new LoopTask();
    Timer timer = new Timer("TaskName");

    public void start() {
        timer.cancel();
        timer = new Timer("TaskName");
        Date executionDate = new Date(); // no params = now
        timer.scheduleAtFixedRate(task, executionDate, delay);
    }

    private class LoopTask extends TimerTask {
        public void run() {
            System.out.println("This message will print every 10 seconds.");
        }
    }

    public static void main(String[] args) {
        ClassExecutingTask executingTask = new ClassExecutingTask();
        executingTask.start();
    }


}
下面是一个类,该类具有一个方法,该方法将ScheduledExecutorService设置为每10秒发出一次嘟嘟声,持续一小时:

 import static java.util.concurrent.TimeUnit.*;
 class BeeperControl {
    private final ScheduledExecutorService scheduler =
       Executors.newScheduledThreadPool(1);

    public void beepForAnHour() {
        final Runnable beeper = new Runnable() {
                public void run() { System.out.println("beep"); }
            };
        final ScheduledFuture<?> beeperHandle =
            scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
        scheduler.schedule(new Runnable() {
                public void run() { beeperHandle.cancel(true); }
            }, 60 * 60, SECONDS);
    }
 }
导入静态java.util.concurrent.TimeUnit.*;
类蜂鸣器控制{
专用最终计划执行器服务计划程序=
Executors.newScheduledThreadPool(1);
公共空间{
最终可运行蜂鸣器=新可运行(){
public void run(){System.out.println(“beep”);}
};
最终计划的未来蜂鸣器手柄=
scheduleAtFixedRate(蜂鸣器,10秒,10秒);
scheduler.schedule(新的Runnable(){
public void run(){beeperHandle.cancel(true);}
},60*60,秒);
}
}

试试这个。它将每隔几分钟重复一次run()函数。要更改设置的分钟数,请更改分钟数变量

int MINUTES = 10; // The delay in minutes
Timer timer = new Timer();
 timer.schedule(new TimerTask() {
    @Override
    public void run() { // Function runs every MINUTES minutes.
        // Run the code you want here
        CLASSB.funcb(); // If the function you wanted was static
    }
 }, 0, 1000 * 60 * MINUTES);
    // 1000 milliseconds in a second * 60 per minute * the MINUTES variable. 
别忘了做进口

import java.util.Timer;
import java.util.TimerTask;
有关更多信息,请访问此处:

使用Java8的解决方案

ClassB b = new ClassB();    
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable task = () -> {
    b.funb();
};
executor.scheduleWithFixedDelay(task, 0, 10, TimeUnit.MINUTES);

我认为这背后有一个合理的问题;这就是我编辑它的原因。@balpha:你在那里发挥了一些魔力:oTimerTask已经过时,被ExecutorService和相关的实现所取代。真的吗?找不到这样的说法。我想看看你的消息来源。谢谢!:)这个问题/答案证实了skaffman的说法:类名不符合Java约定。我使用了main中的代码。但当任务达到时间限制时,程序不会退出。如何使程序在任务完成时停止?运行起来很有魅力。可能值得一提的是scheduleAtFixedRate(蜂鸣器,10,10,秒);前10个是发送第一个蜂鸣音之前等待的时间。第二个10是等待下一次蜂鸣音的时间。60*60是它的运行时间。
ClassB b = new ClassB();    
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable task = () -> {
    b.funb();
};
executor.scheduleWithFixedDelay(task, 0, 10, TimeUnit.MINUTES);