NSThread

引言: 之前介绍过 线程的概念pthread的使用

线程执行的流程图

线程执行的流程图

图解:

1.新建线程 调用start方法后线程进入就绪状态 此时线程对象在可调度线程池

2.CPU会在线程之间调度

当线程执行完任务或异常时线程会自动销毁

当调用调用sleep方法或等待同步锁时

3.此时线程会进入阻塞状态
如果调用sleep方法或等待同步锁的时间到时 线程就会被CPU调度

线程的属性

  • name属性 主要用于区分线程在线程异常时方便找出异常的线程
  • threadPriority属性 线程的优先级 取值范围0~1.0 数值越大CPU在该线程调度的次数相对越多

NSThread创建线程的方法

  • 方法一
  NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadTest) object:nil];
    
  [thread start];
  • 方法二
 [NSThread detachNewThreadSelector:@selector(threadTest) toTarget:self withObject:nil];

  • 方法三
 [self performSelectorInBackground:@selector(threadTest) withObject:nil];
  • 执行线程的方法(没有参数形式)
- (void)threadTest {
    NSLog(@"threadTest所在线程 -- %@", [NSThread currentThread]);
}
  • 执行线程的方法(含参数)
- (void)threadTest:(NSString *)name {
    NSLog(@"threadTest -- %@", name);
}

多线程操作共享资源

  • 共享资源应使用线程的同步技术 让多条线程按顺序指向任务

  • 可以使用互斥锁 如果发现其他线程正在 执行锁定代码 线程会进入休眠 它可以有效防止多线程抢夺资源造成的数据安全问题

@synchronized(锁对象) {需要锁定的代码}

  • 加锁会降低程序执行效率

  • 自旋锁 如果发现其他线程正在锁定代码 线程会用死循环的方式 一直等待锁定代码执行完成 它 不适合执行耗时代码

demo学习资源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容