NSThread总结
来源:互联网 发布:哑铃锻炼软件 编辑:程序博客网 时间:2024/05/21 09:27
NSThread是对线程的一个抽象。
NSThread提供了:
start(), cancel(), exit()等控制线程状态的接口;
isExecuting, isCanceled, isFinished等查询线程状态的接口;
threadDictionary,name,stackSize等和线程相关的信息;
priority:可以查看和设置该thread的优先级
一些相关的通知:
NSDidBecomeSingleThreadedNotification
NSThreadWillExitNotification
NSWillBecomeMultiThreadedNotification
开启一个新线程的方法
1、先创建,再开启
// 创建线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(test:) object:nil];
// 启动该线程
[thread start];
2、分离一个子线程
[NSThread detachNewThreadSelector:@selector(test:) toTarget:self withObject:@”分离子线程”];
3、开启一条后台线程
[self performSelectorInBackground:@selector(test:) withObject:@”后台线程”];
NSThread的生命周期:
控制线程状态
1.启动线程
[thread start];
线程进入就绪状态, 当线程执行完毕,进入死亡状态
2.阻塞(暂停)线程
+ (void)sleepUntilDate:(NSDate *)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)t;
线程进入阻塞状态
3.强制停止线程
+(void)exit;
代码演示:
让任务执行100次, 看下效果
- (void)test {
for (int i = 0; i < 100; ++i) {
NSLog(@”%d - %@”, i, [NSThread currentThread]);
}
NSLog(@”—-end—-“);
}
让任务在执行过程中强制停止
- (void)test {
for (int i = 0; i < 100; ++i) {
NSLog(@”%d - %@”, i, [NSThread currentThread]);
if (i == 10) {
[NSThread exit];
}
}
}
当达到停止条件时, 线程就强制退出了
线程一旦进入到死亡状态, 线程也就停止了, 就不能再次启动任务.
4.cancel一个线程
thread.canceled = YES;
这个方法仅仅是把该线程的thread置为yes,线程依旧会正常执行。
这时需要使用者在代码中周期性的检查canceled属性(和NSOperation的cancel属性一样),当发现cancel置为yes时,可以先做一些线程的清理工作,然后中断线程
线程安全:
资源共享导致多个线程操作同意数据时数据错乱:
解决方法:互斥锁
@synchronized(锁对象) {
//资源互斥区的操作
}
加锁的注意点
- 必须是全局唯一的.
- 加锁的位置
- 加锁的前提条件(多条线程抢夺同一块资源)
加锁的优点
- 能有效的防止因为多线程抢夺资源造成的数据安全问题
加锁的缺点
会耗费一些额外的 CPU 资源
造成线程同步(多条线程在同一条线上执行,而且是按顺序的执行)
线程间通信:
线程间通信的体现
- 一个线程传递数据给另一个线程
- 在一个线程中执行完毕特定任务后, 转到另一个线程继续执行任务
常用方法:
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait;
- NSThread总结
- NSThread使用总结
- NSOperationQueue GCD NSThread总结
- NSThread使用总结
- ios多线程之NSThread总结
- NSThread
- NSThread
- NSThread
- NSThread
- NSThread
- NSThread
- NSThread
- NSThread
- NSThread
- NSThread
- NSThread
- NSThread
- NSThread
- cas框架配置详解
- js的闭包
- JavaScript强化教程——严格模式
- 采用dlopen、dlsym、dlclose加载动态链接库
- Paxos一致性算法原理分析
- NSThread总结
- Android中自定义样式与View的构造函数中的第三个参数defStyle的意义
- 高并发重复请求的去重处理
- VR社交打破次元界限 消费主力将是00后
- android sql 批量处理插入/修改/删除 操作通用代码
- [Android 测试] 压力稳定性测试之: Monkey 详解分析脚本
- UILabel显示html文本
- 【UML学习】--包图
- 做软件开发的同学常用软件列表