NSThread

作者: iOSser | 来源:发表于2017-07-20 16:17 被阅读11次

    引言: 之前介绍过 线程的概念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(锁对象) {需要锁定的代码}
    
    
    • 加锁会降低程序执行效率

    • 自旋锁 如果发现其他线程正在锁定代码 线程会用死循环的方式 一直等待锁定代码执行完成 它 不适合执行耗时代码

    demo学习资源

    相关文章

      网友评论

        本文标题:NSThread

        本文链接:https://www.haomeiwen.com/subject/enqjkxtx.html