线程的创建
name 设置现场的名字 priority设置线程的优先级(优先级在0-1之间默认是0.5 ,值越大,线程执行的概率越高) start()方法启动线程 *要不是配置name priority完全根据自己的需要 不需要的话可以忽略
t2创建的线程是异步的 不会阻塞主线程 (详细见下文) 所以输出的结果是t1和t2交替运行的结果
从上文代码中可以看到下载图片时开启了一个新的线程 当下载完成后返回到主线程配置图片
Demo:huxiao123/NSThreadDownload · GitHub
线程的取消和退出
废话🙊 先撸代码
可以看出线程的取消和退出完全不是一回事,取消一个线程后线程并没有被释放,只有调用exit()方法才会退出,释放掉内存。
当我们想获取一个线程的名字时可以通过[TSThread currentThread].name 来获取线程的名字
可以通过isCancellid()方法判断一个线程是否被取消
由于上文中使用了一个异步线程,所以打印出的结果是交替进行,切线程B只执行了99次就退出
线程🔒(这里不做详细介绍 只是简单认识一下 后面会单独拿出来总结)
在一个场景中, 对于一个共享资源,允许多个线程同时读取(GET),但为了保护资源的正确性,同一时刻只能有一个线程修改(SET)共享资源, 这种情况下就要使用线程🔒来对共享资源进行保护和访问限制。
1.@synchronized(self){
要执行的动作
}
上面的[NSThread sleepforTimeInterval:0.01] 只是为了调试用 不需要的话可以取消
2.NSLock 它通过两个方法来进行资源的访问限制 加锁 [(NSLock *)Lock lock] 解锁 [_(NSLock *)Lock unlock] 把要执行的动作放在两个方法直接就行了