多线程的优缺点
优点:能适当提高程序的执行效率,能适当提高资源利用率(CPU,内存)
缺点:线程越多,CPU在调度线程上的开销就越大,线程之间的通信、多线程的数据共享更复杂
一、NSThread
优缺点:NSThread 比其他两个轻量级,但是需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销
创建方式
1、类方法创建线程并且开始运行线程
缺点:无法对线程进行更详细的设置
Thread.detachNewThreadSelector(#selector(action), toTarget: self, with: nil)
Thread.detachNewThread {
//block形式
}
2、实例方法创建线程
操作前可以设置线程的优先级,名称等属性
let thread = Thread(target: self, selector: #selector(action2), object: nil)
thread.name = "lxl125z"
thread.threadPriority = 0.5 //设置优先级
thread.start()
3、隐式创建并启动线程
performSelector(inBackground: #selector(action2), with: nil)
线程同步:
1、NSCondition
condition.lock() //加锁
condition.unlock() //解锁
condition.wait() //等待
condition.signal() //唤醒
let condition = NSCondition()
while (true) {
condition.lock() //加锁
if count>0 {
Thread.sleep(forTimeInterval: 0.1)
count -= 1
print("action2执行了",Thread.current,Thread.isMainThread)
}else{
break
}
condition.unlock()
}
2、NSLock
3、互斥锁
简化 NSLock的使用
oc中的互斥锁:
@synchronized(self) {
//需要执行的代码块
}
swift中的互斥锁:
objc_sync_enter(self)
//需要执行的代码块
objc_sync_exit(self)