多线程是单个应用程序内多个代码的执行路径,在每个应用程序的内部都会存在一个或者多个并行的线程,同时或者几乎在同一时间里执行不同的任务,swift继承了老的OC的方法
1NSThread 是轻量级最轻的,需要自己管理线程的生命周期和线程同步,线程同步会对数据的枷锁会有一定的系统开销
//定义一个下载图片的方法 用于线程的调用
func downLoadImg() {
var imageURL = "http//www.baidu.com"
var data = NSData.dataWithContentsOfMappedFile(NSURL(fileURLWithPath: imageURL) as! String)
}
}
直接创建线程并且自动运行线程
//直接创建线程
NSThread.detachNewThreadSelector("downLoadImg", toTarget: self, withObject: nil)
2创建线程的对象 然后手动运行线程,在运行线程之前可以设置线程的优先级等线程信息,
//实例方法 创建线程的对象
var myThread = NSThread(target: self, selector: "downLoadImg", object: nil)
//线程的调用
myThread.start()
线程同步的方法通过锁来实现,每个线程都只有一个锁,这个锁与一个特定的线程绑定,线程同步的方法
//定义两个线程
var thread1:NSThread?
var thread2:NSThread?
//定义两个线程的条件,用于锁住线程
var condition1:NSCondition?
var condition2:NSCondition?
//用于两个线程之间的调用
func method1(sender:AnyObject){
for var i = 0; i < 10; i++ {
print("NSThread 1 running \(i)")
//睡一秒
sleep(1)
if(i == 2) {
//启动线程2
thread2?.start()
//本线程thread1锁定
condition1?.lock()
condition1?.wait()
condition1?.unlock()
}
}
print("NSThread 1 over")
//线程2的激活
condition2?.signal()
}
func method2(sender:AnyObject) {
for var i = 0; i < 10;i++ {
print("NSThread 2 running \(i)")
sleep(1)
if(i == 2) {
//线程1的激活
condition1?.signal()
//线程2的锁定
condition2?.lock()
//暂停线程 等待
condition2?.wait()
condition2?.unlock()
}
}
print("NSThread 2 over")
}
}
//两个线程的实例化
thread1 = NSThread(target: self, selector: "method1:", object: nil)
thread2 = NSThread(target: self, selector: "method2", object: nil)
当线程1启动时,线程2就会被挂起,线程2启动时,线程1就会被挂起