多线程基础(五)NSThread线程通信

5、多线程基础

线程间通信



什么叫线程间通信

在一个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信

线程间通信的体现

1个线程传递数据给另一个线程

在1个线程中执行完特定任务后,

  • 线程间通信的体现
  • 1个线程传递数据给另1个线程
  • 在1个线程中执行完特定任务后,转到另1个线程继续执行任务

线程间通信常用方法 perform执行 selector选择器

- (void)performSelectorOnMainThread:(SEL)aSelectorwithObject:(id)argwaitUntilDone:(BOOL)wait;

- (void)performSelector:(SEL)aSelectoronThread:(NSThread*)thrwithObject:(id)argwaitUntilDone:(BOOL)wait;

上面两个方法是对象方法,继承NSObject的对象都能使用。

代码(以加载网络上的图片为例)



这里先给一个网络图片下载的地址,蛮高清的图片哦:

URL: http://g.hiphotos.baidu.com/zhidao/pic/item/42166d224f4a20a4884b622491529822730ed0f8.jpg

在敲代码之前,要在info.plist项目文件中添加一个设置

因为自从XCode 7.0之后,从网络加载就需要自己手动在info.plist文件中添加设置App Transport Security Settings这个选项


不使用多线程的操作


下面我们需要采用一些方法来获取一段代码的执行获取的时间

  • 第一种方法

  • 第二种方法


然后切入正题,在子线程中发送消息给主线程,也是两种方法:

  • 方法一


注意上面的代码用了NSThread的sleep方法,让其睡眠3秒钟。

  • 方法二


关于这个第三种方法,可以看看我的总结,然后基本可以达到不用看源码快速自己敲出代码:

时间: 2024-11-23 07:34:14

多线程基础(五)NSThread线程通信的相关文章

iOS多线程编程之一——NSThread线程管理

iOS多线程编程之一--NSThread线程管理 NSTread是iOS中进行多线程开发的一个类,其结构逻辑清晰,使用十分方便,但其封装度和性能不高,线程周期,加锁等需要手动处理. 一.NSThread类方法总结 获取当前线程 ? 1 + (NSThread *)currentThread; 这个方法通过开启一个新的线程执行选择器方法 ? 1 + (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:

Java 并发/多线程教程(五)-相同线程

       本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正!        相同线程是一并发框架模型,是一个单线程系统向外扩展成多个单线程的系统.这样的结果就是多个单线程并行运行. 为什么是单线程系统?         你也许会感到好奇,为什么当今还有人设计单线程系统.单线程系统之所以这么普及,是因为单线程系统相对于多线程并发系统更为简单.单线程系统不需要与其他线程共享任何数据.这就使得单线程系统可以使用非并发的数据结构,可以更

5天不再惧怕多线程——第五天 线程池

说到多线程,不可不说线程池,C#中关于池的概念很多,今天来整理下ThreadPool的使用. 是的,如果你很懒,如果你的执行任务比较短,如果你不想对线程做更精细的控制,那么把这些繁琐的东西丢给线程池吧. 一:ThreadPool 好了,下面看看TheadPool下有哪些常用的方法. 1:GetMaxThreads,GetMinThreads 首先我们肯定好奇线程池到底给我们如何控制线程数,下面就具体的看一看. class Program { static void Main(string[] a

浅谈.NET下的多线程和并行计算(五)线程池基础 上

池(Pool)是一个很常见的提高性能的方式.比如线程池连接池等,之所以有这些池是因为线程和数 据库连接的创建和关闭是一种比较昂贵的行为.对于这种昂贵的资源我们往往会考虑在一个池容器中放置 一些资源,在用的时候去拿,在不够的时候添点,在用完就归还,这样就可以避免不断的创建资源和销毁 资源. 如果您做过相关实验的话可能会觉得不以为然,似乎开1000个线程也用不了几百毫秒.我们要这么想 ,对于一个高并发的环境来说,每一秒假设有100个请求,每个请求需要使用(开和关)10个线程,也就 是一秒需要处理10

java 多线程-线程通信实例讲解_java

线程通信的目标是使线程间能够互相发送信号.另一方面,线程通信使线程能够等待其他线程的信号. 通过共享对象通信 忙等待 wait(),notify()和 notifyAll() 丢失的信号 假唤醒 多线程等待相同信号 不要对常量字符串或全局对象调用 wait() 通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值.线程 A 在一个同步块里设置 boolean 型成员变量 hasDataToProcess 为 true,线程 B 也在同步块里读取 hasDataToProc

实例解析iOS应用多线程开发中NSthread类的用法_IOS

一.NSthread的初始化 1.动态方法 复制代码 代码如下: - (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;  // 初始化线程  NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];  // 设置线程的优先级(0.0 - 1.0,1.0最高级)  thre

iOS开发Swift篇(02) NSThread线程相关简单说明

一 说明 1)关于多线程部分的理论知识和OC实现,在之前的博文中已经写明,所以这里不再说明. 2)该文仅仅简单讲解NSThread在swift语境中的一些使用和注意点,别他. 3)本文涉及代码可以从https://github.com/HanGangAndHanMeimei/Code地址获得. 二 NSThread的基本使用和创建 1)基本用法(主线程|当前线程) 1 //1.获得执行该方法的当前线程 2 let currentThread = NSThread.currentThread()

Java基础之008-多线程

Java基础之008-多线程                                        35岁学习Java 1.进程和线程的概念. 1)     概念                 进程:正在进行中的程序(直译).                             线程:就是进程中一个负责程序执行的控制单元(执行路径)                 任务:每一个线程都有自己运行的内容.这个内容可以称为线程要执行的任务.                 提示:一个进程

多线程基础(一)基础中的基础

多线程基础: 先上个以下关于进程.线程和任务的基本的概念的概括图:     进程:      系统中正在运行的一个应用程序(一种状态).      每个进程之间是相互独立的,每个进程在其受保护专用的内存空间内.   线程:      一个进程要想执行任务,必须要有线程(每个进程至少有一条线程)      一个进程所有的任务都是在线程中执行的.   线程的串行      一个线程中的任务的执行是串行的      如果在一个线程中执行多个任务,那么只能一个一个按顺序执行这些任务      同一个时间