Delay:线程延迟,该线程还在运行,占用CPU。
sleep:线程休眠,它会被挂起,把CPU让给其他线程,不占用CPU。
1、sleep时间低于delay时间
print("===========开始时间${DateTime.now()}==============="); Future.delayed(Duration(seconds: 10),(){ print("===========延迟10秒后时间${DateTime.now()}==============="); }); Future(() { sleep(Duration(seconds: 5)); print("===========休眠5秒后时间${DateTime.now()}==============="); }); print("===========结束时间${DateTime.now()}===============");
执行结果:
2、sleep时间等于delay时间
print("===========开始时间${DateTime.now()}==============="); Future.delayed(Duration(seconds: 10),(){ print("===========延迟10秒后时间${DateTime.now()}==============="); }); Future(() { sleep(Duration(seconds: 10)); print("===========休眠10秒后时间${DateTime.now()}==============="); }); print("===========结束时间${DateTime.now()}===============");
执行结果:
3、sleep时间大于delay时间
print("===========开始时间${DateTime.now()}==============="); Future.delayed(Duration(seconds: 10),(){ print("===========延迟10秒后时间${DateTime.now()}==============="); }); Future(() { sleep(Duration(seconds: 20)); print("===========休眠20秒后时间${DateTime.now()}==============="); }); print("===========结束时间${DateTime.now()}===============");
执行结果:
总结:
由1、2、3可以得出结论,在使用Delay和sleep时都不影响其他代码的继续执行,这点从开始和结束时间的打印可以看出来;Delay是在Sleep执行完后再执行的,在sleep时间大于等于delay时间时,sleep结束后直接执行delay;在sleep时间小于delay时间时,sleep结束后继续延迟(delay时间-sleep时间)再执行delay。
print("===========开始时间${DateTime.now()}==============="); //延迟嵌套问题 第一个延迟走完后在执行第二个延迟 Future.delayed(Duration(seconds: 10),(){ print("===========1延迟10秒后时间${DateTime.now()}==============="); Future.delayed(Duration(seconds: 5),(){ print("===========2延迟5秒后时间${DateTime.now()}==============="); }); }); //sleep与delayed同时存在的时候,先执行sleep,执行完后再执行delayed. Future(() { sleep(Duration(seconds: 20)); print("===========休眠20秒后时间${DateTime.now()}==============="); }); Future.delayed(Duration(seconds: 5),(){ print("===========3延迟5秒后时间${DateTime.now()}==============="); }); print("===========结束时间${DateTime.now()}===============");
打印如下:
总结:
多个同级delay与sleep共存时,先执行sleep在执行delay不变,delay的执行顺序是看谁的延迟时间短先执行,相同时间的话则顺序执行.