多线程 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/daxueshan/p/7205619.html