maxConcurrentOperationCount
import Foundation
let opqueue = OperationQueue()
opqueue.maxConcurrentOperationCount = 1
opqueue.addOperation({print("厉") ;sleep(3)})
opqueue.addOperation({print("害") ;sleep(3)})
opqueue.addOperation({print("了") ;sleep(3)})
opqueue.addOperation({print("我") ;sleep(3)})
opqueue.addOperation({print("的") ;sleep(3)})
opqueue.addOperation({print("国") ;sleep(3)})
opqueue.waitUntilAllOperationsAreFinished()
因为maxConcurrentOperationCount 的值为1,意味着最大的并发数为1,每个操作sleep 3s,一共6个操作,所以总耗时为 3*6 = 18s
设置最大并发操作数量,maxConcurrentOperationCount =1表示串行队列,>1代表并发队列
如果不设置opqueue.maxConcurrentOperationCount = 1
就使用系统的默认配置。
如果设置opqueue.maxConcurrentOperationCount = 2
则2个操作一起执行,一共3次,所以总耗时为 3*3 = 9s
waitUntilAllOperationsAreFinished
func waitUntilAllOperationsAreFinished()
阻止当前线程,直到所有接收器的排队和执行操作完成执行。
调用时,此方法会阻塞当前线程并等待接收方的当前和排队操作完成执行。当前线程被阻塞时,接收器继续启动已经排队的操作并监视正在执行的操作。在此期间,当前线程无法向队列添加操作,但其他线程可能。完成所有挂起操作后,此方法返回。
如果队列中没有操作,则此方法立即返回。
opqueue.waitUntilAllOperationsAreFinished()
let opqueue = OperationQueue() print(Date())
opqueue.maxConcurrentOperationCount = 1
opqueue.addOperation({print("厉") ;sleep(3)})
opqueue.addOperation({print("害") ;sleep(3)})
opqueue.addOperation({print("了") ;sleep(3)})
opqueue.addOperation({print("我") ;sleep(3)})
opqueue.addOperation({print("的") ;sleep(3)})
opqueue.addOperation({print("国") ;sleep(3)})
opqueue.waitUntilAllOperationsAreFinished()
print(Date())
//打印结果
2019-04-30 05:03:12 +0000
厉
害
了
我
的
国
2019-04-30 05:03:30 +0000
//opqueue.waitUntilAllOperationsAreFinished()
//打印结果
2019-04-30 05:06:45 +0000
厉
2019-04-30 05:06:45 +0000
害
了
我
的
国说明设置了
opqueue.waitUntilAllOperationsAreFinished()
会阻碍当前线程,阻碍之后的打印日期操作。