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