美文网首页
iOS 多线程入门02--NSThread

iOS 多线程入门02--NSThread

作者: XieHenry | 来源:发表于2018-08-02 15:08 被阅读13次

    一、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资源

    • 互斥锁的使用前提:多条线程抢夺同一块资源

    iOS 多线程入门01--概念知识
    iOS 多线程入门03--GCD
    iOS 多线程入门04--NSOperation

    相关文章

      网友评论

          本文标题:iOS 多线程入门02--NSThread

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