Java延迟/等待
如何将while循环延迟到1秒的间隔,而不将其运行的整个代码/计算机延迟到1秒(只是一个小循环)。您的循环似乎在主线程上运行,如果您在该线程上执行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
睡眠
,它将暂停应用程序(因为只有一个线程已暂停),要克服这一问题,您可以将此代码放入并行运行的新线程中
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块。