queue
插入一个任务 delay
插入一个任务 但是类型为 queue
dequeu 取出一个任务执行,如果当前任务不是queue类型的,等待任务执行完后继续取队列中的下一个任务,直到取到queue类型的任务为止
例子:
$.delay(1000);
$.queue(fun1);
$.dequeue();
$.delay(2000);
$.queue(fun2);
$.dequeue();
线程1:按顺序执行.
当执行到dequeue的时候 开启线程2:取出1个任务$.delay(1000);执行。此时线程2 运行中
当执行到第二个dequeue的时候 开启线程3:取出1个任务(由于线程1执行很快,不足1秒,此时线程2只依旧在执行delay,所以线程3获取到任务$.queue(fun1);)由于线程3取到了queue类型的任务,线程3执行完queue后终止。
线程2执行完第一个任务后继续取队列的下一个任务,由于线程3取了$.queue(fun1);。故此时取出的任务为$.delay(2000);由于不是queue类型的任务,执行后继续取下一个任务,$.queue(fun2);执行,终止
总上来看,由于多线程缘故导致,线程3 执行queue类型的任务的时候越过了已经被线程2获取的任务$.delay(1000);。所以方法$.queue(fun1);无延迟启动。而后$.queue(fun2);则经历了$.delay(1000);和$.delay(2000);的2次延迟,合计3秒后才被执行