How do I make a delay in Java?

前端 未结 8 1410
Happy的楠姐
Happy的楠姐 2020-11-22 08:24

I am trying to do something in Java and I need something to wait / delay for an amount of seconds in a while loop.

while (true) {
    if (i == 3) {
        i         


        
8条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-22 09:01

    If you want to pause then use java.util.concurrent.TimeUnit:

    TimeUnit.SECONDS.sleep(1);
    

    To sleep for one second or

    TimeUnit.MINUTES.sleep(1);
    

    To sleep for a minute.

    As this is a loop, this presents an inherent problem - drift. Every time you run code and then sleep you will be drifting a little bit from running, say, every second. If this is an issue then don't use sleep.

    Further, sleep isn't very flexible when it comes to control.

    For running a task every second or at a one second delay I would strongly recommend a ScheduledExecutorService and either scheduleAtFixedRate or scheduleWithFixedDelay.

    For example, to run the method myTask every second (Java 8):

    public static void main(String[] args) {
        final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
        executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);
    }
    
    private static void myTask() {
        System.out.println("Running");
    }
    

    And in Java 7:

    public static void main(String[] args) {
        final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
        executorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                myTask();
            }
        }, 0, 1, TimeUnit.SECONDS);
    }
    
    private static void myTask() {
        System.out.println("Running");
    }
    

提交回复
热议问题