Operation
let mainOperation = BlockOperation {
print(Thread.current)
}
mainOperation.start()
<NSThread: 0x600000820080>{number = 1, name = main}
class CustomOperation: Operation {
override func main() {
if isCancelled == false {
print("CustomOperation = \(Thread.current)")
}
}
}
let customOperation = CustomOperation()
customOperation.start()
CustomOperation = <NSThread: 0x6000031c4600>{number = 1, name = main}
- 其中一个在主线程其他都在子线程,⚠️第一个不一定是在子线程,主线程是随机的
let blcokOperation = BlockOperation {
print("1 - \(Thread.current)")
}
blcokOperation.addExecutionBlock {
print("2 - \(Thread.current)")
}
blcokOperation.addExecutionBlock {
print("3 - \(Thread.current)")
}
blcokOperation.addExecutionBlock {
print("4 - \(Thread.current)")
}
blcokOperation.start()
3 - <NSThread: 0x6000036409c0>{number = 1, name = main}
4 - <NSThread: 0x60000364f4c0>{number = 4, name = (null)}
2 - <NSThread: 0x60000360acc0>{number = 3, name = (null)}
1 - <NSThread: 0x60000360dac0>{number = 5, name = (null)}
OperationQueue 队列
let mainQueue = OperationQueue.main
let operation1 = BlockOperation {
print("队列1 = \(Thread.current)")
}
let operation2 = BlockOperation {
print("队列2 = \(Thread.current)")
}
let operation3 = BlockOperation {
print("队列3 = \(Thread.current)")
}
mainQueue.addOperation(operation1)
mainQueue.addOperation(operation2)
mainQueue.addOperation(operation3)
队列1 = <NSThread: 0x6000035fc9c0>{number = 1, name = main}
队列2 = <NSThread: 0x6000035fc9c0>{number = 1, name = main}
队列3 = <NSThread: 0x6000035fc9c0>{number = 1, name = main}
- 自定义子线程队列 , 设置最大并发数为1时为串行队列
let queue = OperationQueue()
queue.maxConcurrentOperationCount = 1
let operation1 = BlockOperation {
print("队列1 = \(Thread.current)")
}
let operation2 = BlockOperation {
print("队列2 = \(Thread.current)")
}
let operation3 = BlockOperation {
print("队列3 = \(Thread.current)")
}
let operation4 = BlockOperation {
print("队列4 = \(Thread.current)")
}
queue.addOperation(operation1)
queue.addOperation(operation2)
queue.addOperation(operation3)
queue.addOperation(operation4)
let queue = OperationQueue()
let operation1 = BlockOperation {
print("队列1 = \(Thread.current)")
}
let operation2 = BlockOperation {
print("队列2 = \(Thread.current)")
}
operation2.addDependency(operation1)
queue.addOperation(operation1)
queue.addOperation(operation2)
let queue = OperationQueue()
queue.addBarrierBlock {
print(Thread.current)
OperationQueue.main.addOperation {
print(Thread.current)
}
}