我知道这对于更有经验的程序员来说可能是完全显而易见的,但是我找不到任何东西。

无论线程必须执行多长时间,我都需要创建一个以每秒固定次数“滴答”的线程。花费比每个刻度更长的任务显然是不可能的,并且会减慢每秒的刻度数。

谢谢。

最佳答案

这是一个Thread版本。 Timer是最好的选择,但是如果您真的想使用自己的线程。

new Thread(new Runnable() {

    @Override
    public void run() {
        try {
        long before, sleepDuration, operationTime;
        for(int i=0;i<100;i++) {
            before = System.currentTimeMillis();
            // do your operations
            operationTime = (long)(1500*Math.random());
            System.out.print("Doing operations for "+operationTime+"ms\t");
            Thread.sleep(operationTime);

            // sleep for up to 1000ms
            sleepDuration = Math.min(1000, Math.max(1000 - (System.currentTimeMillis() - before), 0));
            Thread.sleep(sleepDuration);
            System.out.println("wait\t"+sleepDuration+"ms =\telapsed " + (operationTime+sleepDuration) + (operationTime > 1000 ? "<" : ""));
        }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}).start();

10-04 18:13