【队列】
作用:决定多个任务是一个个排队执行、还是一股脑同时执行
串行:任务“必须”按先进先出顺序一个个执行。必须执行完第一个任务才能执行第二个任务。
并行:任务“可以”一起执行,注意只是“可以”、“能够”、“被允许”一起执行,而不是一定要一起执行。
【任务】
作用:决定任务是否有权利开启新的线程
同步:任务没有权利开启新线程。
异步:任务有权利开启新线程。
【 ↓ 组合起来会发生什么,不要死记硬背,靠推理 ↓ 】
(实验这里就不做了,浪费篇幅,反正实验记录网上大把)
【串行队列+同步任务】
因为:串行队列,约束了任务必须一个个排队执行;
因为:同步任务,约束了任务无权开启线程,只能使用当前线程;
所以:会在当前线程,将数个任务按顺序执行。自然就是“不会开辟新线程,任务顺序执行”
【串行队列+异步任务】
因为:串行队列,约束了任务必须一个个排队执行;
因为:异步任务,任务有权利开启线程,会立刻开启新的线程来执行此任务;
所以:第1个任务会开辟线程A执行自己,第1个任务结束后,第2个任务会开始执行,但此时线程A闲置了,第2个任务没必要再消耗资源创建新线程B,会直接拿线程A来执行自己,如此循环...自然结论为“会新开启【一个】线程,任务顺序执行”
【并行队列+同步任务】
因为:并行队列,任务“可以、能够、被允许”一起执行。
因为:同步任务,约束了任务无权开启线程,只能使用当前线程;
所以:即使并行队列允许任务同时执行,但同步任务却无权开辟新线程。只能在当前线程执行任务。但一个线程一次只能跑1个任务,所以第二个任务还是必须等第一个任务结束,线程闲置后再执行。自然结论为“不会开辟新线程,任务顺序执行”
【并行队列+异步任务】
因为:并行队列,任务“可以、能够、被允许”一起执行。
因为:异步任务,任务有权利开启线程,会立刻开启新的线程来执行此任务;
所以:所有任务能一起执行,并且每个任务都有权开启新线程。自然结论为“会新开启【多个】线程,任务同步执行”
(注意:虽然每个任务都有权利开启新线程,但实际里手机可以开启的线程是有限的,所以并不是有多少任务就会开启多少线程,线程达到上限后会由内部逻辑进行调度,等线程里任务执行完后才分配新的任务)










网友评论