02-NSThread iOS多线程.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程NSThread创建和启动线程一个NSThread对象就代表一条线程创建、启动线程NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];[thread start];// 线程一启动,就会在线程thread中执行self的run方法主线程相关用法+ (NSThread *)mainThread; // 获得主线程- (BOOL)isMainThread; // 是否为主线程+ (BOOL)isMainThread; // 是否为主线程其他用法获得当前线程NSThread *current = [NSThread currentThread];线程的名字- (void)setName:(NSString *)n;- (NSString *)name;其他创建线程方式创建线程后自动启动线程[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];隐式创建并启动线程[self performSelectorInBackground:@selector(run) withObject:nil];上述2种创建线程方式的优缺点优点:简单快捷缺点:无法对线程进行更详细的设置线程的状态NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];[thread start];CPU调度当前线程start运行Running新建New就绪RunnableCPU调度其他线程线程任务执行完毕异常\强制退出sleep到时\得到同步锁阻塞Blocked死亡Dead调用了sleep方法\等待同步锁内存可调度线程池线程对象其他线程对象注意:在此讨论的是橙色背景线程的状态控制线程状态启动线程- (void)start; // 进入就绪状态 - 运行状态。当线程任务执行完毕,自动进入死亡状态阻塞(暂停)线程+ (void)sleepUntilDate:(NSDate *)date;+ (void)sleepForTimeInterval:(NSTimeInterval)ti;// 进入阻塞状态强制停止线程+ (void)exit;// 进入死亡状态注意:一旦线程停止(死亡)了,就不能再次开启任务多线程的安全隐患资源共享1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源比如多个线程访问同一个对象、同一个变量、同一个文件当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题安全隐患示例01 – 存钱取钱时间存钱取钱线程线程余额1000100010001000+100020001000-500500安全隐患示例02 – 卖票时间卖票卖票线程线程票数1000100010001000 -- 1999安全隐患分析安全隐患解决 – 互斥锁安全隐患解决 – 互斥锁互斥锁使用格式@synchronized(锁对象) { // 需要锁定的代码 }注意:锁定1份代码只用1把锁,用多把锁是无效的互斥锁的优缺点优点:能有效防止因多线程抢夺资源造成的数据安全问题缺点:需要消耗大量的CPU资源互斥锁的使用前提:多条线程抢夺同一块资源相关专业术语:线程同步线程同步的意思是:多条线程在同一条线上执行(按顺序地执行任务)互斥锁,就是使用了线程同步技术原子和非原子属性OC在定义属性时有nonatomic和atomic两种选择atomic:原子属性,为setter方法加锁(默认就是atomic)nonatomic:非原子属性,不会为setter方法加锁原子和非原子属性的选择nonatomic和atomic对比atomic:线程安全,需要消耗大量的资源nonatomic:非线程安全,适合内存小的移动设备iOS开发的建议所有属性都声明为nonatomic尽量避免多线程抢夺同一块资源尽量将加锁、资源抢夺的业务逻辑交给服务器端处理,减小移动客户端的压力线程间通信什么叫做线程间通信在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信线程间通信的体现1个线程传递数据给另1个线程在1个线程中执行完特定任务后,转到另1个线程继续执行任务线程间通信常用方法- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;- (void)performSelector:(SEL)aSelec

文档评论(0)

little28 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档