多线程知识点之NSThread的使用

/********线程的状态**************************************/

线程的状态:新建状态(New)--->就绪状态(Runnable)----->运行状态(Running)---->阻塞状态(Blocked)---->死亡状态(Dead)

启动线程

- (void)start;

// 进入就绪状态 -> 运行状态。当线程任务执行完毕,自动进入死亡状态

阻塞(暂停)线程

+ (void)sleepUntilDate:(NSDate *)date;

+ (void)sleepForTimeInterval:(NSTimeInterval)ti;

//    [NSThread sleepForTimeInterval:2]; // 让线程睡眠2秒(阻塞2秒)

//    [NSThread sleepUntilDate:[NSDate distantFuture]];

// 进入阻塞状态

强制停止线程

+ (void)exit;

// 进入死亡状态

/********多线程安全隐患的解决方法(互斥锁)**************************************/

互斥锁使用格式

@synchronized(锁对象) { // 需要锁定的代码  }

注意:锁定1份代码只用1把锁,用多把锁是无效的,一般用控制器对象self作为锁对象

互斥锁的优缺点

优点:能有效防止因多线程抢夺资源造成的数据安全问题

缺点:需要消耗大量的CPU资源

互斥锁的使用前提:多条线程抢夺同一块资源

相关专业术语:线程同步

线程同步的意思是:多条线程在同一条线上执行(按顺序地执行任务)

互斥锁,就是使用了线程同步技术

OC在定义属性时有nonatomic和atomic两种选择

atomic:原子属性,为setter方法加锁(默认就是atomic)

nonatomic:非原子属性,不会为setter方法加锁

atomic:线程安全,需要消耗大量的资源

nonatomic:非线程安全,适合内存小的移动设备

/********多线程间通信**************************************/

线程间通信常用方法

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;

线程间另一种通信方式 – 利用NSPort

NSPort;

NSMessagePort;

NSMachPort;

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

//开启一条子线程

[self performSelectorInBackground:@selector(download) withObject:nil];

}

// 子线程方法

- (void)download

{

// 图片的网络路径

NSURL *url = [NSURL URLWithString:@"http://img.pconline.com.cn/images/photoblog/9/9/8/1/9981681/200910/11/1255259355826.jpg"];

// 加载图片

NSData *data = [NSData dataWithContentsOfURL:url];

// 生成图片

UIImage *image = [UIImage imageWithData:data];

// 回到主线程,显示图片

[self.imageView performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];

//    [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];

//    [self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:YES];

}

/********NSThread开启线程的三种方式方式@"jack"(线程的名字)*****/

- (void)createThread3

{

[self performSelectorInBackground:@selector(run:) withObject:@"jack"];

}

- (void)createThread2

{

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

}

- (void)createThread1

{

// 创建线程

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

// 启动线程

[thread start];

}

时间: 2024-11-05 15:44:54

多线程知识点之NSThread的使用的相关文章

多线程编程 (1) -NSThread

多线程编程 (1) -NSThread 每个iOS应用程序都有个专门用来更新显示UI界面.处理用户触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行,多线程编程是防止主线程堵塞,增加运行效率的最佳方法. iOS中有3种常见的多线程编程方法: 1.NSThread 这种方法需要管理线程的生命周期.同步.加锁问题,会导致一定的性能开销 2.NSOperation和NSOpe

Java 多线程知识点整理

1.如何停止一个正在运行的线程? 使用共享变量,用volatile变量修饰,线程循环去访问该变量.如果线程因为发生某些事件进行阻塞,可以使用Thread的interrupt方法.可以使一个被阻塞的线程抛出一个中断异常,从而使线程提前结束阻塞状态,退出堵塞代码. class MyThread extends Thread { volatile boolean stop = false; public void run() { while (!stop) { System.out.println(g

iOS多线程知识点总结

一.应用场景 异步下载数据,这是多线程技术的一个比较常见的应用场景 还有一些比较耗时的操作或者功能(客户端与服务端的交互:从数据库中一次性读取大量数据等),需要在主线程之外,单独的开辟一个新的线程(子线程/工作线程)来执行. 二.iOS支持的多线程编程方法 NSThread NSOperation & NSOperationQueue GCD 四.线程的创建 创建后台线程,自动的开启线程 //performSelectorInBackground内部会创建一个线程 专门 执行调用 -thread

IOS 多线程编程之 NSThread 的使用

1.简介: IOS 多线程编程之 NSThread 的使用 1.1 IOS 有三种多线程编程的技术,分别是: 1..NSThread 2.Cocoa NSOperation (IOS 多线程编程之 NSOperation 和 NSOperationQueue 的使用) 3.GCD 全称:Grand Central Dispatch( IOS 多线程编程之 Grand Central Dispatch(GCD)介绍和使用) 这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也

IOS 多线程02-pthread 、 NSThread 、GCD 、NSOperationQueue、NSRunLoop

注:本人是翻译过来,并且加上本人的一点见解. 要点: 1.前言 2.pthread 3.NSThread 4.Grand Central Dispatch(GCD) 5.Opearation Queues 6. Run Loops 7. 多线程编程中面临的挑战 8. 资源共享 9. 互斥锁 10. 死锁 11. 资源饥饿(Starvation) 12. 优先级反转 1. 前言 其实把RunLoop叫做多线程不正确,因为它不能真正的并行,不过因为它与并发编程有莫大关系,所以值得我们深入了解. 2.

网络多线程(pthread , NSThread,GCD ,NSOperation)

在这里给大家介绍一些多线程的知识,以及应用,希望能给一些需要的朋友学习学习,如果有错误的地方,请帮忙指出,非常感谢. 那么先介绍多线程前,先说一下什么是线程,什么是进程? 进程:{ 1.正在运行的一个应用程序就叫进程. 2.每个进程之间都是相互独立的,每个进程都运行在自己独立的专用的且受保护的内存空间内. } 线程:{  1.线程是进程的基本执行单元. 2.每一个进程都默认开启一条线程,我们称之为主线程.(一个进程至少有一条线程) } 多线程:多线程就是一个进程可以开辟多线线程(子线程),同时执

iOS开发之多线程技术(NSThread、OperationQueue、GCD)

在前面的博客中如果用到了异步请求的话,也是用到的第三方的东西,没有正儿八经的用过iOS中多线程的东西.其实多线程的东西还是蛮重要的,如果对于之前学过操作系统的小伙伴来说,理解多线程的东西还是比较容易的,今天就做一个小的demo来详细的了解一下iOS中的多线程的东西.可能下面的东西会比较枯燥,但还是比较实用的. 多线程用的还是比较多的,废话少说了,下面的两张截图是今天我们实验的最终结果,应该是比较全的,小伙伴们由图来分析具体的功能吧: 功能说明: 1.点击同步请求图片,观察整个UI界面的变化,并点

iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信

一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码) 三.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题(存钱取钱的例子,多个售票员卖票的例子) 安全隐患解决的方法 --- 互斥锁(图解)

iOS 中实现多线程的方法 NSThread

使用多线程的好处: 1.   使用多线程可以把程序中占据时间长的任务放到后台去处理,如图片.视频的下载 2.   发挥多核处理器的优势,并发执行让系统运行的更快.更流程.用户体验更好 使用多线程的缺点: 1.   大量的线程降低代码的可读性 2.   更多的线程需要更多的内存空间 3.   当多个线程对一个资源出现争夺的时候要注意线程安全的问题 NSThread(两种创建方式) 优点:NSThread比其它两个轻量级 缺点:需要自己管理线程的生命周期,线程同步,线程同步时对数据的加锁会有一定的系