有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

服务器如何在每个特定的时间间隔在后台运行Java程序?

我在Raspberry Pi上编写了一个简单的java代码,它将数据从Raspberry Pi发送到服务器。现在,我不想手动运行程序,而是希望程序在后台每隔10秒(任何特定时间)自动执行一次,这样新的数据就会在这段时间后发送到服务器。Raspberry Pi在Raspbian操作系统上运行。 有人能帮我解决这个问题吗?先谢谢你


共 (4) 个答案

  1. # 1 楼答案

    您有两种选择:从cron或类似的位置定期运行作业,或者将应用程序更改为长时间运行的进程,该进程将作为服务在您的设备上运行,并将执行自己的调度。像Quartz(http://www.quartz-scheduler.org/)这样的库可以用来实现后者。长时间运行的作业的一个微小优势是在启动作业时(初始化和拆除JVM)的损失更小

  2. # 2 楼答案

    我找到了答案。 使用crontab,您可以在特定的时间间隔执行任务。 对于java文件,您必须创建一个jar文件,如果您希望每一分钟运行一次,那么crontab的语法是

            • java -jar /path_of_your_jar_file/File_name.jar

    但这里的问题是你的任务每1分钟重复一次。所以,如果你想在10秒内完成,那么你必须使用线程睡眠。 线程睡眠的代码是

    Timer timer = new Timer();
    
    timer.schedule(new TimerTask() { 
    
     @Override
     public void run() {
    
         method_name();
    
        }
    },0,10000);
    
  3. # 3 楼答案

    您可以为应用程序使用java.util.Timer,而不是Thread

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            //write your code here
            System.out.print(new Date() + "\n");
        }
    }, 0, 1000);
    

    我认为这是解决你问题的最简单的方法

  4. # 4 楼答案

    您可以使用Thread在特定时间点执行代码

    例如:

    Thread thread = new Thread(new Runnable(){
    
            @Override
            public void run() {
                while(true){
                    try{
                        //your code
                        Thread.sleep(10*1000);//this is poll interval
                    }catch(InterruptedException e){
                        e.printStackTrace();
                    }
                }
    
            }
    
    });
    thread.setDaemon(true);
    thread.start();