Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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 - Fatal编程技术网

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上旋转,这是低效的,即使如此,由于操作系统调度,你也可能无法达到精确的毫秒。在尝试之前,请阅读有关实时编程的内容。