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


多线程 NSThread 的使用的更多相关文章

  1. iOS多线程 NSThread/GCD/NSOperationQueue

    无论是GCD,NSOperationQueue或是NSThread, 都没有线程安全 在需要同步的时候需要使用NSLock或者它的子类进行加锁同步 "] UTF8String], DISPA ...

  2. 多线程NSThread基本用法

        #import "ViewController.h" @interface ViewController () @end @implementation ViewContr ...

  3. [iOS]深入浅出 iOS 之多线程 NSThread

    OS 支持多个层次的多线程 编程,层次越高的抽象程度越高,使用起来也越方便,也是苹果最推荐使用的方法.     下面简要说明这三种不同范式:  Thread 是这三种范式里面相对轻量级的,但也是使用起 ...

  4. 多线程 -- NSThread

    NSThread NSThread 一个NSThread对象就代表一条线程 创建线程的几种方式 alloc/init // 1.创建线程 NJThread *thread = [[NJThread a ...

  5. [iOS 多线程 & 网络 - 1.1] - 多线程NSThread

    A.NSThread的基本使用 1.创建和启动线程 一个NSThread对象就代表一条线程创建.启动线程NSThread *thread = [[NSThread alloc] initWithTar ...

  6. 多线程 NSThread GCD

    ios多线程实现种类 NSThread NSOperationQueue NSObject GCD *************** 1.NSThread //线程 第一种 NSThread *thre ...

  7. iOS多线程NSThread和GCD

    在iOS中啊  其实有多种方法实现多线程 这里只记录两个比较常用的  或者说我比较常用的 一个就是BSThread 另一个就是一听名字就比较霸气的妇孺皆知的GCD 先说一下NSThread吧 这个方式 ...

  8. iOS 多线程NSThread理解与场景示例

    NSThread是相对GCD和NSOperationQuene而言,比较轻量级的一种多线程处理方式. 但同时,它的弊端就是需要自己管理线程的生命周期,以及线程同步:而另外两种不需要自己管理. 常见方法 ...

  9. 九、使用多线程——NSThread,GCD和NSOperation

    概述 早上起床,你先打开洗衣机,然后用热水把泡面泡上,接着打开电脑开启一天的码农生活.其中“洗衣服”.“泡泡面”和“码代码”3个任务(线程)同时进行,这就是多线程.网上有许多关于多线程的经典解释,此处 ...

  10. IOS 多线程 NSThread

    一个正在运行的应用程序是一个进程,一个进程会默认开启一个主线程,但是在主线程中的操作是串行的,也就是当有多个任务同时需要完成的时候,是按照顺序一个个执行.因此,为了提高效率,会在进程中开启多个线程,每 ...

随机推荐

  1. Redhat 下添加用户到docker用户组

    1. 检查系统中是否存在docker用户组,如果没有则手动添加 # sudo cat /etc/group |grep docker # sudo grouped -g 999 docker # -g ...

  2. xcode中的预定义宏

    [xcode中的预定义宏] 1.SRCROOT,是定义本target的proj的路径. 2.OBJROOT,对象文件根路径,对象文件(即obj文件)就是中间的临时文件.中间文件输出目录的名字以“pro ...

  3. 【原创】4. MYSQL++ 之 SQLTypeAdapter类型、SQLQueryParms类型 与 SQLBuffer

    1. mysqlpp::SQLBuffer 该类型其实就是SQLTypeAdapter传入的各种类型(int, string, double, long, String, …) 的包装,包装的结果就是 ...

  4. git配置多用户多平台

    在Git使用中经常会碰到多用户问题,例如:你在公司里有一个git账户,在github上有一个账户,并且你想在一台电脑上同时对这两个git账户进行操作,此时就需要进行git多用户配置. 首先配置不同的S ...

  5. Luogu 4949 最短距离

    这就是个水题. 一开始想把整个环找出来断开当一条链,然后其他部分正常链剖,两个点之间的路径如果经过环就考虑一下走哪边更快. 但是这样子还是太麻烦了. 我们可以直接断开环上的一条边,然后正常链剖,只要在 ...

  6. Python3 使用selenium库登陆知乎并保存cookie为本地文件

    Python3 使用selenium库登陆知乎并保存cookie为本地文件 学习使用selenium库模拟登陆知乎,并将cookie保存为本地文件,然后供以后(requests模块)使用,用selen ...

  7. Django cache

    Django中使用redis 方式一: utils文件夹下,建立redis_pool.py import redis POOL = redis.ConnectionPool(host='127.0.0 ...

  8. js 清空 input[type=file]的值

    js 不能操作 input[type=file]但你可以将这个 input 的 dom 元素删除掉,再新增一个,或者替换掉 $("#UploadFile").replaceWith ...

  9. [GO]new函数的使用

    new函数的作用其实就是动态分配一个空间,我们只需要进行使用,不需要考虑它的内存释放的它的生命周期 package main import "fmt" func main() { ...

  10. 【Web API2】ASP.NET Web API Security

    实现安全的方式既可以是host提供,也可以框架提供. 1,HTTP Module 方式,工作在IIS上,所以web api要托管在IIS上才行.其作用于HTTP管道的最前端,所以这种方式影响的是全局, ...