swift多线程学习—基本使用

531 阅读1分钟

1.Thread

// 类方法创建,自启动
Thread.detachNewThreadSelector(#selector(threadMethodSel), toTarget: self, with: nil)

// 实例方法创建,手动启动
let thread1 = Thread(target: self, selector: #selector(threadMethodSel), object: nil)
thread1.start()
thread1.cancel()

2.Operation

//  创建operation
let operation = BlockOperation(block: {
    [weak self] in self?.operationMethodSel()
})

// 创建队列
let queue = OperationQueue()
// operation添加到队列中
queue.addOperation(operation)

3.GCD

// 创建串行队列
let serial = DispatchQueue(label: "serialQueue")

// 创建并行队列
let concurrent = DispatchQueue(label: "concurrentQueue", attributes: .concurrent)
// 暂停队列
concurrent.suspend()
// 继续队列
concurrent.resume()

// 获取主线程队列
let mainQueue = DispatchQueue.main

// 主线程异步
DispatchQueue.main.async {
    print("主线程异步")
}

// 主线程同步——会导致死锁
DispatchQueue.main.sync {
    print("主线程同步")
}

// 异步全局队列
DispatchQueue.global().async {
    print("异步全局队列")
}

// 延迟调用
DispatchQueue.global(qos: .default).asyncAfter(deadline: DispatchTime.now() + 2.0) {
    NSLog("global thread after %@", "1")
}
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2.0) {
    NSLog("main thread after %@", "1")
}