Java延迟/等待

Java延迟/等待,java,loops,delay,wait,notify,Java,Loops,Delay,Wait,Notify,如何将while循环延迟到1秒的间隔,而不将其运行的整个代码/计算机延迟到1秒(只是一个小循环)。您的循环似乎在主线程上运行,如果您在该线程上执行睡眠,它将暂停应用程序(因为只有一个线程已暂停),要克服这一问题,您可以将此代码放入并行运行的新线程中 try{ Thread.sleep(1000); }catch(InterruptedException ex){ //do stuff } Thread.sleep(1000);//在1000毫秒(1秒)内不执行任何操作。正如Jigar

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

您的循环似乎在主线程上运行,如果您在该线程上执行
睡眠
,它将暂停应用程序(因为只有一个线程已暂停),要克服这一问题,您可以将此代码放入并行运行的新
线程中

try{

  Thread.sleep(1000);
}catch(InterruptedException ex){
  //do stuff
}

Thread.sleep(1000);//在1000毫秒(1秒)内不执行任何操作。

正如Jigar所指出的,您可以使用另一个线程来执行工作,该线程可以独立于其他线程进行操作、睡眠等。
java.util.Timer
类也可能对您有所帮助,因为它可以为您执行周期性任务,而无需您进行多线程编程。

我的延迟循环的简单方法

在没有遵循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
//第1种方式:线程。睡眠:与第2种方式相比效率较低
试一试{
while(true){//或任何循环
//做点什么
Thread.sleep(sleeptime);//示例:Thread.sleep(1000);1秒睡眠
}
}捕获(中断异常例外){
//钓鱼
}
//=======================================================线程.睡眠
//第二种方式:对象锁定等待=由于对象级同步而最有效。
Object obj=新对象();
试一试{
同步(obj){
while(true){//或任何循环
//做点什么
obj.wait(睡眠时间);//示例obj.wait(1000);1秒睡眠
}
}
}捕获(中断异常例外){
//钓鱼
}
//====================================================对象锁定等待
//第三种方式:循环等待=效率较低,但比两种方式更精确。
long expectedtime=System.currentTimeMillis();
while(true){//或任何循环
while(System.currentTimeMillis()
而不会减慢整个代码的速度this@JigarJoshi我正在尝试以1秒的间隔延迟我的Minecraft插件的while循环。但是大多数等待方法都会在设置的时间内暂停整个服务器,而不仅仅是在一段固定的时间内执行while循环,然后以固定的延迟再次执行。这不会暂停整个脚本/计算机吗?这只会暂停运行此代码的特定线程。你的计算机不会像第三种方法那样被冻结,因为它可以抑制整个cpu内核,没有人会把这称为代码气味。第三种方法的另一个优点是它不需要额外的try/catch块。