Flutter学习之 Delay(延迟)与sleep(休眠)的区别

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的执行顺序是看谁的延迟时间短先执行,相同时间的话则顺序执行. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值