创建的三种方式

  • 第一种

    • 介绍
    /*alloc init 创建第一个参数:目标对象第二个参数:选择器,线程启动要调用哪个方法第三个参数:前面方法要接收的参数(最多只能接收一个参数,没有则传nil)*/
    NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"子线程"];
    • 使用
    /*第一种方式创建*/
    -(void)threadCreate1{NSLog(@"主线程-------%@",[NSThread currentThread]);//创建线程NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"子线程"];//开始执行线程[thread start];NSLog(@"主线程-------%@",[NSThread currentThread]);
    }
    /*线程执行方法*/
    -(void)run:(id)obj{for (int i=0; i<3; i++) {NSLog(@"%@----%@",[NSThread currentThread],obj);}
    }
    • 结果
  • 第二种

    • 介绍
    /*
    分离出一条子线程
    第一个参数:线程启动调用的方法
    第二个参数:目标对象
    第三个参数:传递给调用方法的参数
    */
    [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"我是分离出来的子线程"];
    • 使用
     /*第二种方式创建*/
    -(void)threadCreate2{NSLog(@"主线程-------%@",[NSThread currentThread]);//detachNewThreadSelector   会理解在后台执行selector方法[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"我是分离出来的子线程"];NSLog(@"主线程-------%@",[NSThread currentThread]);
    }
    /*线程执行方法
    */
    -(void)run:(id)obj{for (int i=0; i<3; i++) {NSLog(@"%@----%@",[NSThread currentThread],obj);}
    }
    • 结果
  • 第三种

    • 介绍
     //后台线程//第一个参数:线程启动调用的方法//第二个参数:传递给调用方法的参数//特点:自动启动线程
    [self performSelectorInBackground:@selector(run:) withObject:@"我是后台线程"];
    • 使用
    /*
    第三种方式创建
    */
    -(void)threadCreate3{NSLog(@"主线程-------%@",[NSThread currentThread]);//是NSObject分类的一个方法,意味着所有继承于NSObject的类都是用用此方法,并且在其他线程执行方法!//只要设定,那么它会立即在后台执行 selector   方法[self performSelectorInBackground:@selector(run:) withObject:@"后台线程"];NSLog(@"主线程-------%@",[NSThread currentThread]);
    }
    /*
    线程执行方法
    */
    -(void)run:(id)obj{for (int i=0; i<3; i++) {NSLog(@"%@----%@",[NSThread currentThread],obj);}
    }
    • 结果

      线程的状态

  • 介绍
    objc //线程的各种状态:新建-就绪-运行-阻塞-死亡 //常用的控制线程状态的方法 [NSThread exit];//退出当前线程 [NSThread sleepForTimeInterval:2.0];//阻塞线程 [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];//阻塞线程 //注意:线程死了不能复生

  • 使用
    objc /* 状态 */ -(void)threadState{ NSLog(@"睡2 秒"); //为类方法,直接让线程睡眠两秒 [NSThread sleepForTimeInterval:2.0]; //分离出一个子线程 [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:nil]; } /* 线程执行方法 */ -(void)run:(id)obj{ for (int i=0; i<8; i++) { if(i==2){ NSLog(@"睡5秒"); //[NSDate dateWithTimeIntervalSinceNow:5.0] 从现在开始过了5秒 //睡到指定的日期, [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:5.0]]; } NSLog(@"%@----%d",[NSThread currentThread],i); //当线程满足一定的条件,可以强行停止 if (i==5) { //退出 [NSThread exit]; } } NSLog(@"这里是不能来的,因为在5的时候就退出了"); }
  • 结果

  • 扩展

    ####一定不能在主线程执行 [NSThread exit] 如果一旦执行了那么程序则会终止掉

    • 写到这才发现,忘记介绍线程中常用属性

      //设置线程的属性
      //设置线程的名称
      thread.name = @"线程A";//设置线程的优先级,注意线程优先级的取值范围为0.0~1.0之间,1.0表示线程的优先级最高,如果不设置该值,那么理想状态下默认为0.5
      thread.threadPriority = 1.0;
      • thread.name是在一般比较大型的项目中比较常见的设置,因为大型项目中会有走很多线程,然而出现bugthread.name能在短时间内查找
      • thread.threadPriority这个是设置优先级别,但是我建议还是不要去设置它,因为多线程开发:尽量简单点,不要太复杂,影响性能不说,有可能还把自己带晕,不值得,以上纯属个人建议。

                      本章到此结束欢迎各位码友随意转载并指正

转载于:https://www.cnblogs.com/ljy-666/p/5125818.html

多线程篇-NSThread-简单使用相关推荐

  1. iOS开发多线程篇—自定义NSOperation

    iOS开发多线程篇-自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UI ...

  2. iOS开发多线程篇—线程的状态

    iOS开发多线程篇-线程的状态 一.简单介绍 线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(te ...

  3. iOS开发多线程篇—多线程简介

    iOS开发多线程篇-多线程简介 一.进程和线程 1.什么是进程 进程是指在系统中正在执行的一个应用程序 每一个进程之间是独立的.每一个进程均执行在其专用且受保护的内存空间内 比方同一时候打开QQ.Xc ...

  4. ocbase 数据库 蚂蚁_iOS开发数据库篇—FMDB简单介绍

    iOS开发数据库篇-FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...

  5. python 多线程就这么简单(续)

    python 多线程就这么简单(续) 之前讲了多线程的一篇博客,感觉讲的意犹未尽,其实,多线程非常有意思.因为我们在使用电脑的过程中无时无刻都在多进程和多线程.我们可以接着之前的例子继续讲.请先看我的 ...

  6. 面试题汇总二 Java 多线程篇

    前言 题目汇总来源 史上最全各类面试题汇总,没有之一,不接受反驳 面试题汇总一 Java 语言基础篇 面试题汇总二 Java 多线程篇 面试题汇总三 Java 集合篇 面试题汇总四 JVM 篇 面试题 ...

  7. 从入门到实战,Netty多线程篇案例集锦

    从入门到实战,Netty多线程篇案例集锦 原创 2015-09-10 李林峰 InfoQ Netty案例集锦系列文章介绍 1|Netty的特点 Netty入门比较简单,主要原因有如下几点: Netty ...

  8. 明翰Java教学系列之多线程篇V0.2(持续更新)

    文章目录 传送门 前言 背景知识 并行与并发 线程与进程 内存模型 1. 计算机内存模型 `2. Java内存模型` 2.1 内存交互 2.1.1 交互操作 2.1.2 交互规则 `2.2 并发编程特 ...

  9. 【Java实习生面试题系列】-- 多线程篇四

    文章目录 1. 说下对同步器 AQS 的理解? 2. AQS 的原理是什么? 3. AQS 底层使用了模板方法模式,你能说出几个需要重写的方法吗? 4. 说下对 Semaphore.CountDown ...

  10. iOS开发UI篇—UIWindow简单介绍

    iOS开发UI篇-UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWi ...

最新文章

  1. laravel 如何自定义全局的方法/类
  2. mysql 性能和安全性_从源码解读Mysql 5.7性能和数据安全性的提升
  3. 简述推荐系统中的矩阵分解
  4. jcmd:JDK14中的调试神器
  5. mysql substr 中文字符_解析使用substr截取UTF-8中文字符串出现乱码的问题
  6. 依赖注入(di)模式_Java依赖注入– DI设计模式示例教程
  7. “清华同方同传”By软件:同方易教管理平台 V2.4
  8. php连接mysql MariaDB_PHP+MariaDB数据库操作基本技巧
  9. Power Query M语言全部list函数,快速分类掌握
  10. Matlab OpenEXR 打开exr格式图片
  11. CF 949 D Curfew —— 二分答案
  12. LaTeX 相对于 Word 有什么优势?
  13. CC2540/CC2541/CC254x之OSAL操作系统抽象层
  14. 达人评测锐龙r7 5800h和酷睿i7 12650h选哪个好
  15. aws mysql 费用_AWS 免费一年套餐详解
  16. Android 集成Xposed框架
  17. 目标检测中anchor的概念
  18. 找出相似的图片--C#
  19. 小厂B端产品啥都干——B端表格设计入门指南(上)
  20. Kafka 生产者数据安全(ACK机制,ACK时机,ACK应答机制,故障处理,Exactly Once)

热门文章

  1. 软件集成策略故事连载----对项目的不利影响竟然这么大
  2. Mysql 数据库水平分表 存储过程
  3. 亚马逊低调收购Biba 或下月发布视频消息服务
  4. 微软老兵 Antoine LeBlond 将正式离职
  5. 只用2000行代码实现google protocol buffer c++版的功能
  6. 37signals为何砍掉中层?个人点评,高素质人才队伍工作,靠的是全体发挥综合能力,而不是靠......
  7. 修复远程过程调用 (RPC) 时发生的各种问题KB908521
  8. 为什么每个人都应该尝试Ubuntu下篇 Why Everyone Should Try Ubuntu 分享
  9. 网络爬虫--15.【糗事百科实战】多线程实现
  10. 学成在线--18.新增课程(课程分类查询)