Java Delay/Wait

后端 未结 4 920
悲&欢浪女
悲&欢浪女 2020-12-10 01:20

How do I delay a while loop to 1 second intervals without slowing down the entire code / computer it\'s running on to the one second delay (just the one little loop).

相关标签:
4条回答
  • 2020-12-10 01:43

    As Jigar has indicated you can use another Thread to do work which can operate, sleep etc independently of other Threads. The java.util.Timer class might help you as well since it can perform periodic tasks for you without you having to get into multithreaded programming.

    0 讨论(0)
  • 2020-12-10 01:46

    My simple ways to delay a loop.

    I already put the codes here after failing to follow the stackoverflow's standards.

    //1st way: Thread.sleep : Less efficient compared to 2nd
    try {
      while (true) {//Or any Loops
       //Do Something
       Thread.sleep(sleeptime);//Sample: Thread.sleep(1000); 1 second sleep
      }
     } catch (InterruptedException ex) {
       //SomeFishCatching
     }
    //================================== Thread.sleep
    
    
    //2nd way: Object lock waiting = Most efficient due to Object level Sync.
    Object obj = new Object();
     try {
      synchronized (obj) {
       while (true) {//Or any Loops
       //Do Something
       obj.wait(sleeptime);//Sample obj.wait(1000); 1 second sleep
       }
      }
     } catch (InterruptedException ex) {
       //SomeFishCatching
     }
    //=============================== Object lock waiting
    
    //3rd way:  Loop waiting = less efficient but most accurate than the two.
    long expectedtime = System.currentTimeMillis();
    while (true) {//Or any Loops
       while(System.currentTimeMillis() < expectedtime){
         //Empty Loop   
       }
       expectedtime += sleeptime;//Sample expectedtime += 1000; 1 second sleep
       //Do Something
    }
    //===================================== Loop waiting
    
    0 讨论(0)
  • 2020-12-10 02:00

    Thread.sleep(1000); // do nothing for 1000 miliseconds (1 second)

    0 讨论(0)
  • 2020-12-10 02:03

    It seems your loop runs on Main thread and if you do sleep on that thread it will pause the app (since there is only one thread which has been paused), to overcome this you can put this code in new Thread that runs parallely

    try{
    
      Thread.sleep(1000);
    }catch(InterruptedException ex){
      //do stuff
    }
    
    0 讨论(0)
提交回复
热议问题