zoukankan      html  css  js  c++  java
  • 多线程 NSThread 的使用

    NSThread简介

    使用NSThread 实现多线程,需要手动管理线程的生命周期, 

    一.线程的创建

    //1.实例方法创建,,需要手动启动线程

     

        NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(run) object:nil];

     

        [thread start];

    //2.类方法

        [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];

        

    二.线程的睡眠(暂停线程)

    //当前线程调用 sleep 方法,进入阻塞状态,

     

        [NSThread sleepUntilDate:[NSDate distantFuture];

     

        [NSThread sleepForTimeInterval:1.0];

    三.改变线程的优先级

    //优先级越高的线程,被执行的几乎越高,每个线程的优先级默认为0.5

    //获取

       NSLog(@"%f",thread.threadPriority);

    //设置

        thread.threadPriority = 1.0;

     

    四.线程的安全问题

    1.使用@ synchronized 实现同步

     

    @synchronized{

     

    //此处的代码就是:同步的代码块

     

    }

    //含义:线程开始执行同步代码块之前,需要先获得对同步监视器的锁定

    //同步监视器目的: 阻止 两个线程对一个共享资源进行并发访问

     

    2.同步锁 NSLock

    //类似,只是显示的使用对象最为同步锁

    //每次只能有一个线程对 NSLock 对象加锁,线程开始访问共享资源之前需要获得 NSLock 对象

     NSLock *lock;

           lock = [[NSLock alloc]init];

        //锁定

        [lock lock];

        

        //...需要保证线程安全的代码

        

        //解锁

        [lock unlock];

     

     

    五.使用 NSCondition 控制线程通信

    NSCondition提供了三个方法:

    1.阻塞当前线程,直到其他线程调用了该 NSCondition 的 signal 或 broadcast 方法,来唤醒该线程

    - wait 

    - waitUntilDate:

    2.唤醒在此 NSCondition对象上等待的单个线程

    - signal

    3.唤醒在此 NSCondition对象上等待的所有线程

    - broadcast

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    前序中序输出后序
    Blah数集
    中缀表达式转后缀表达式 (栈)
    1357:车厢调度 (栈)
    最长公共上升子序列 (LIS+LCS+记录)
    1481:Maximum sum (前缀和+dp)
    8464:股票买卖
    7627:鸡蛋的硬度
    2989:糖果
    U33405 纽约 (二分)
  • 原文地址:https://www.cnblogs.com/daxueshan/p/7205619.html
Copyright © 2011-2022 走看看