引言: 之前介绍过 线程的概念 和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(锁对象) {需要锁定的代码}
加锁会降低程序执行效率
自旋锁 如果发现其他线程正在锁定代码 线程会用死循环的方式 一直等待锁定代码执行完成 它 不适合执行耗时代码