如何在java中修复方法的特定时间

时间:2014-09-29 22:06:44

标签: java user-interface timer

我正在用Java编写代码,它有三个连续调用的主要方法。今天,我的教授告诉我通过设置代码频率来改进代码,这意味着应该为每个方法分配一个特定的时间。如果在那之前完成,它应该等待那么长时间,然后调用应该转到下一个方法。

例如:如果第一种方法的时间为3秒,那么它应该在那里等待三秒,即使它已经完成,然后转到下一个方法感觉。

我已经在我的代码中使用了一个计时器来减慢移动速度,因为它是一个GUI。我计划使用另一个计时器,但我觉得它只会减慢速度。如何在特定时间(例如3秒)内修复该方法的周期。

如果您有任何想法,请与我们联系。

1 个答案:

答案 0 :(得分:1)

如果您无法在自己的线程上睡眠,请在另一个线程上运行该任务。单个执行程序线程可以很好地执行,您可以向其提交要执行的任务。在执行程序线程中休眠不应影响GUI线程。

private Executor executor = Executors.newFixedThreadPool(1);

public void method1() {
    System.out.println("Method 1 called");
}

public void method2() {
    System.out.println("Method 2 called");
}

public void method3() {
    System.out.print("Method 3 called");
}

public void start() {
    executor.execute(new Runnable() {
        private final long WAIT_TIME = 3000; // ms

        @Override
        public void run() {
            long startTime = System.currentTimeMillis();
            method1();
            sleep(startTime);

            startTime = System.currentTimeMillis();
            method2();
            sleep(startTime);

            startTime = System.currentTimeMillis();
            method3();
            sleep(startTime);
        }

        private void sleep(long startTime) {
            long timeTaken = System.currentTimeMillis() - startTime;
            long timeLeft = WAIT_TIME - timeTaken;
            if(timeLeft < 0) return;

            try {
                Thread.sleep(timeLeft);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    });
}