Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java时钟独立于所有其他操作_Java_Clock - Fatal编程技术网

Java时钟独立于所有其他操作

Java时钟独立于所有其他操作,java,clock,Java,Clock,我试图模拟一个实时数据流,测试一个不断过滤和计算数据点的程序。主要是我需要确保它符合时间 每50毫秒将有一个新的数据点需要计算 因此,我想创建一个java时钟,它独立于jvm中当前运行的内容或系统上发生的任何事情 所以我的问题有两个: 首先,System.currentTimeMillis()不是我在这里想要的,因为它基于jvm打开的时间,并且在执行任何系统调用时都会发生 第二,我如何使一个线程持续运行,并且总是在50毫秒的时候触发 计时器和TimerTask有非常好的预定义机制(与纯线程相比)

我试图模拟一个实时数据流,测试一个不断过滤和计算数据点的程序。主要是我需要确保它符合时间

每50毫秒将有一个新的数据点需要计算

因此,我想创建一个java时钟,它独立于jvm中当前运行的内容或系统上发生的任何事情

所以我的问题有两个:

首先,System.currentTimeMillis()不是我在这里想要的,因为它基于jvm打开的时间,并且在执行任何系统调用时都会发生


第二,我如何使一个线程持续运行,并且总是在50毫秒的时候触发

计时器和TimerTask有非常好的预定义机制(与纯线程相比):

import java.util.Timer;
import java.util.TimerTask;

public class Reminder {
    Timer timer;

    public Reminder(int seconds) {
        timer = new Timer();
        timer.schedule(new RemindTask(), seconds*1000);
    }

    class RemindTask extends TimerTask {
        public void run() {
            System.out.format("Time's up!%n");
            timer.cancel(); //Terminate the timer thread
        }
    }

    public static void main(String args[]) {
        new Reminder(5);
        System.out.format("Task scheduled.%n");
    }
}
(摘自:)

此机制允许您每5秒在RemindTask的run()方法中执行一次代码(该值在代码中指定)

请查看,更具体地说是该方法

它允许您定期执行操作。

请查看。 以下是一个例子:

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(new Runnable() {
public void run() { 
    //New data point
}
}, 0, 50,TimeUnit.MILLISECONDS );

new Thread(new Runnable(){public void run(){while(true){//some logic…}}}}}).start()
您所说的“当系统调用被执行时它会发生”是什么意思?您所说的“system.currentTimeMillis()…基于jvm被打开的时间”和“system.currentTimeMillis()是什么意思…在执行任何系统调用时都会发生“”,以便在实际执行行system.currentTimeMillis()时获得更新。我希望它以固定的时间间隔模拟一个中断,与我的程序何时开始执行该中断无关line@AlexRellim. 如果它对您有效,您应该使空心复选标记变为绿色