NSThread

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

线程执行的流程图

NSThread_第1张图片
线程执行的流程图

图解:

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学习资源

  • NSThread学习Demo

你可能感兴趣的:(NSThread)