一、pthread ✨
这个是c语言的,很少用到。更多资料可以百度自行了解。
二、NSThread ✨✨
1.使用方法
//写法1:
// 创建一个NSThread
NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(demo:) object:@"Thread"];
//启动线程
[thread start];
//写法2 类方法创建并启动线程
[NSThread detachNewThreadSelector:@selector(demo:) toTarget:self withObject:@"Detach"];
//写法3
//InBackground 就是在后台(子线程)运行!!
//是NSObject的分类 意味着所有的基础NSObject的都可以使用这个方法
//非常方便.不用NSThread对象
[self performSelectorInBackground:@selector(demo:) withObject:@"background"];
-(void)demo:(id)obj{
}
部分属性:
//获得当前线程
NSThread *current = [NSThread currentThread];
// 获得主线程
+ (NSThread *)mainThread;
// 是否为主线程
- (BOOL)isMainThread;
// 是否为主线程
+ (BOOL)isMainThread;
//线程的名字 -命名多线程的名字,方便找到问题所在
- (void)setName:(NSString *)n;
- (NSString *)name; //x.name = @"Thread A";
//启动线程
- (void)start;
//阻塞(暂停)线程 进入阻塞状态
+ (void)sleepUntilDate:(NSDate *)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
//强制停止线程 进入死亡状态
+ (void)exit; //[NSThread exit];
//优先级 从 0.0 -- 1.0 默认值 0.5
/*
多线程目的:将耗时操作放在后台,不阻塞UI线程!
建议:在开发的时候,不要修改优先级
在多线程开发中,不要相信一次的运行结果!!
*/
t.threadPriority = 0.1;
2.多线程的安全隐患---资源共享
一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源。
比如多个线程访问同一个对象、同一个变量、同一个文件。
当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题。
3.安全隐患解决-互斥锁
- 互斥锁使用格式
@synchronized(锁对象) { // 需要锁定的代码
}
注意:锁定1份代码只用1把锁,用多把锁是无效的
- 互斥锁的优缺点
优点:能有效防止因多线程抢夺资源造成的数据安全问题
缺点:需要消耗大量的CPU资源
- 互斥锁的使用前提:多条线程抢夺同一块资源