多线程 NSThread 的使用
NSThread简介
使用NSThread 实现多线程,需要手动管理线程的生命周期,
一.线程的创建
//1.实例方法创建,,需要手动启动线程
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(run) object:nil];
[thread start];
//2.类方法
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
二.线程的睡眠(暂停线程)
//当前线程调用 sleep 方法,进入阻塞状态,
[NSThread sleepUntilDate:[NSDate distantFuture];
[NSThread sleepForTimeInterval:1.0];
三.改变线程的优先级
//优先级越高的线程,被执行的几乎越高,每个线程的优先级默认为0.5
//获取
NSLog(@"%f",thread.threadPriority);
//设置
thread.threadPriority = 1.0;
四.线程的安全问题
1.使用@ synchronized 实现同步
@synchronized{
//此处的代码就是:同步的代码块
}
//含义:线程开始执行同步代码块之前,需要先获得对同步监视器的锁定
//同步监视器目的: 阻止 两个线程对一个共享资源进行并发访问
2.同步锁 NSLock
//类似,只是显示的使用对象最为同步锁
//每次只能有一个线程对 NSLock 对象加锁,线程开始访问共享资源之前需要获得 NSLock 对象
NSLock *lock;
lock = [[NSLock alloc]init];
//锁定
[lock lock];
//...需要保证线程安全的代码
//解锁
[lock unlock];
五.使用 NSCondition 控制线程通信
NSCondition提供了三个方法:
1.阻塞当前线程,直到其他线程调用了该 NSCondition 的 signal 或 broadcast 方法,来唤醒该线程
- wait
- waitUntilDate:
2.唤醒在此 NSCondition对象上等待的单个线程
- signal
3.唤醒在此 NSCondition对象上等待的所有线程
- broadcast
转载于:https://www.cnblogs.com/daxueshan/p/7205619.html
多线程 NSThread 的使用相关推荐
- [Cocoa]深入浅出Cocoa之多线程NSThread
深入浅出Cocoa之多线程NSThread 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 iOS ...
- 多线程——NSThread、GCD、NSOperation
1.前言: 一个应用程序就是一个进程,一个进程至少包含一个线程,程序启动会自动创建一个主线程,负责UI界面的现实和控件事件的监控.多线程可以更充分的利用系统CPU资源,一定程度上提升程序的性能.1个进 ...
- 浅谈多线程——NSThread
上一篇文章中我们大致了解了GCD的模式和方法,在iOS开发中除了GCD之外,还有NSThread和NSOperation两种多线程方式. 1.NSThread - a - 使用NSThread开辟多线 ...
- 1.多线程-NSThread
1.在主线程执行多次NSLog模拟耗时操作 结果,卡住主线程 解决方案: performSelectorInBackground让程序在后台执行 2.pthread的使用 开辟子线程,执行一个函数 _ ...
- iOS学习6_多线程NSThread和GCD
NSThread 1.显式创建线程调用start开启 NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@select ...
- iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)
2017-07-08 remember17 Cocoa开发者社区 目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 ...
- iOS_多线程(一)
在学习多线程之前首先搞清楚以下几个问题. 并发:在同一时刻,只有一条指令被执行,多条指令进行快速切换执行. 并行:在同一时刻,多个处理器可以处理多条指令 1.什么是进程? 一个运行的程序就是一个进程或 ...
- IOS多线程开发详解
概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操 ...
- iOS开发系列--并行开发其实很容易
--多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的, ...
- [Cocoa]深入浅出Cocoa系列
深入浅出Cocoa系列 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 这是本人在研究 Cocoa ...
最新文章
- 巨变的时代、人工智能AI带来颠覆性的影响、技术十大趋势
- 【crontab】误删crontab及其恢复
- 怎么装python解析器_linux 下安装 python 解析器
- 高可用集群技术之RHCS应用详解(一)
- Linux查看系统信息命令实例
- 只知道java有反射可以说是动态语言,动态链接,早期晚期绑定、虚方法这些概念你知道吗
- python吧_Python | 初识Python程序设计
- 《MySQL管理之道:性能调优、高可用与监控》china-pub首发!
- python编程理论_Python并发编程理论篇,来看看
- Pandas最详细教程来了!
- linux 3.2.0 卸载,linux python3编译以及 卸载,python默认为python3 ,pip默认为pip3,亲测版...
- 塔科夫帧数测试软件,逃离塔科夫如何优化游戏FPS_画面优化设置详解_52pk
- 学生通讯录管理系统的设计与实现
- 迅手系统连接不到服务器,逆火快速上手.doc
- 表单验证:名称、电话号码、邮箱
- electron通过注册表打开软件
- linux下的时间 date 和 hwclock命令
- document的用法
- 关于html5外文翻译三千字,论文外文文献翻译3000字左右.pdf
- 多线程中线程池常见7个参数的详解以及执行流程