Java 我想将时间的连续变化值存储在变量中,然后将其与其他时间进行比较以完成一些任务。怎么做
我想将持续变化的时间值(以毫秒为单位)存储在一个变量中,然后将其与其他时间值进行比较以完成一些任务。怎么做? 问题是,一旦我的程序被编译,存储在变量中的毫秒值在整个程序中是相同的,并且它永远不会改变。如果将所有条件与同一时间和我想做某项任务的时间进行比较,那么这些条件永远不会出现。我想比较时间值和时钟时间的变化。我将非常感谢你的帮助 下面是我用来连续获取时间的代码,我将其存储在构造函数中:Java 我想将时间的连续变化值存储在变量中,然后将其与其他时间进行比较以完成一些任务。怎么做,java,Java,我想将持续变化的时间值(以毫秒为单位)存储在一个变量中,然后将其与其他时间值进行比较以完成一些任务。怎么做? 问题是,一旦我的程序被编译,存储在变量中的毫秒值在整个程序中是相同的,并且它永远不会改变。如果将所有条件与同一时间和我想做某项任务的时间进行比较,那么这些条件永远不会出现。我想比较时间值和时钟时间的变化。我将非常感谢你的帮助 下面是我用来连续获取时间的代码,我将其存储在构造函数中: Thread clock = new Thread(){ @Override
Thread clock = new Thread(){
@Override
public void run() {
while(true){
Calendar cal = Calendar.getInstance();
millisAt_ONU = cal.getTimeInMillis();
}
};
clock.start();
我用这段代码将它与未来的时间进行比较——我的条件将在这个时间执行:
if(millisAt_ONU == receivedGATE_time8){
//receivedGATE_time8 is the time which will come
try {
socOnu.sendReportHP(report_ONU_8_HP);
socOnu.sendReportLP(report_ONU_8_LP);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("--------------------------------\n");
System.out.println("Sent REPORT for ONU-8!");
}
只需将任务安排在指定的时间。在本例中,MySystem是您编写的用于维护流程状态的类。它有一些方法someAction1,someAction2,…包含问题中所示的操作。和t1,t2,…是延迟,相对于现在,当你想要这些动作发生的时候
MySystem system = ... /* Set up whatever you need as a context. */
ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();
worker.schedule(system::someAction1, t1, TimeUnit.MILLIS);
worker.schedule(system::someAction2, t2, TimeUnit.MILLIS);
...
worker.shutdown();
你可能得不到毫秒精度。如果您需要精确计时,您可能需要查看实时系统。millisAt_ONU是如何声明的?它可能是不稳定的,因为您正在一个线程中设置它的值,并在另一个线程中读取它。您是否意识到millisAt_ONU==receivedGATE_time8为真的可能性非常小?Calendar.getInstance.getTimeInMillis是一项繁重的操作。使用System.CurrentTimeMilli更简单、更快。我正在进行基于光网络的项目模拟。我必须匹配毫秒才能发送和接收数据。请在这件事上帮助我@Talex你的时钟线程将在CPU上旋转,这是低效的,即使如此,由于操作系统调度,你也可能无法达到精确的毫秒。在尝试之前,请阅读有关实时编程的内容。