Java延迟/等待

Gra*_*ams 15 java loops delay notify wait

如何将while循环延迟到1秒间隔,而不会将运行的整个代码/计算机减慢到一秒延迟(只有一个小循环).

COD*_*BOY 28

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

  • 这不会暂停整个脚本/计算机吗? (2认同)
  • 这只会暂停运行此代码的特定线程.你的电脑不会冻结 (2认同)

Jig*_*shi 11

看起来你的循环在主线程上运行,如果你sleep在那个线程上运行,它会暂停应用程序(因为只有一个线程已被暂停),为了克服这一点,你可以把这个代码放在新的Thread并行运行

try{

  Thread.sleep(1000);
}catch(InterruptedException ex){
  //do stuff
}
Run Code Online (Sandbox Code Playgroud)


D.R*_*llo 5

我延迟循环的简单方法。

在未能遵循 stackoverflow 的标准后,我已经将代码放在这里。

//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
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢第三种方式,因为它可以抑制整个 cpu 内核,而且没有人会_永远_将其称为代码异味。 (3认同)