iOS多线程之NSThread线程小知识点

NSThread 线程睡眠

如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用NSThread 类的静态。sleepXxx方法来完成。提供如下两个控制线程暂停的类方法:
//让当前正在执行的线程暂停到date(代表时间)并进入阻塞状态。
+ (void)sleepUntilDate:(NSDate *)date;
//让当前正在执行的线程暂停ti秒,并进入阻塞状态。
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
> 调用这两个方法进入阻塞状态后,在其睡眠时间段内,该线程不会获得执行的机会,因此常用这两个方法来暂停线程的执行,

// 暂停当前线程 暂停两秒 sliːp
[NSThread sleepForTimeInterval:2];
// 或者
NSDate * date = [NSDate dateWithTimeInterval:2 sinceDate:[NSDate date]];
[NSThread sleepUntilDate:date];

线程的优先级

每个线程执行时都有一定的优先级,优先级高的线程获得较多的执行机会,每个子线程默认的优先级为0.5。
NSThread提供了如下实例方法来设置获取线程的优先级:
(prʌɪˈɒrɪti 优先)
+ (double)threadPriority;//该类方法获取当前正在执行的线程的优先级
- threadPriority://该实例方法获取调用该方法线程对象的优先级
+ (BOOL)setThreadPriority:(double)p;//该类方法用于设置当前正在执行的线程的优先级
- (BOOL)setThreadPriority:(double)p;//该实例方法用于设置该方法的线程对象的优先级
参数类型double 范围是0.0~1.0 其中1.0代表最高优先级,0.0代表最低优先级

   NSLog(@"UI线程的优先级为:=======%g" , [NSThread threadPriority]);
   // 创建第一个线程对象
   NSThread* thread1 = [[NSThread alloc]initWithTarget:self selector:@selector(run) object:nil];
   // 设置第一个线程对象的名字
   thread1.name = @"线程A";
   NSLog(@"线程A的优先级为:=======%g" , thread1.threadPriority);
   // 设置使用最低优先级
   thread1.threadPriority = 0.1;
   NSLog(@"线程A的优先级为:=======%g" , thread1.threadPriority);
   
   // 创建第二个线程对象
   NSThread* thread2 = [[NSThread alloc]initWithTarget:self selector:@selector(run) object:nil];
   // 设置第二个线程对象的名字
   thread2.name = @"线程B";
   NSLog(@"线程B的优先级为:---------%g" , thread2.threadPriority);
   // 设置使用最高优先级
   thread2.threadPriority = 0.9;
   NSLog(@"线程B的优先级为:---------%g" , thread2.threadPriority);
   
   // 启动2个线程
   [thread1 start];
   [thread2 start];

- (void)run
{
   for(int i = 0 ; i < 100 ; i++)
   {
       NSLog(@"-----%@----%d" , [NSThread currentThread].name, i);
   }
}

根据输出结果我们会发现 线程B 并"不是"被优先执行,为什么?

你可能感兴趣的:(iOS多线程之NSThread线程小知识点)