iOS开发多线程篇—线程的状态
来源:互联网 发布:淘宝直播抢红包软件 编辑:程序博客网 时间:2024/06/06 06:43
一、简单介绍
线程的创建:
self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];
说明:创建线程有多种方式,这里不做过多的介绍。
线程的开启:
[self.thread start];
线程的运行和阻塞:
(1)设置线程阻塞1,阻塞2秒
[NSThread sleepForTimeInterval:2.0];
(2)第二种设置线程阻塞2,以当前时间为基准阻塞4秒
NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0];
[NSThread sleepUntilDate:date];
线程处理阻塞状态时在内存中的表现情况:(线程被移出可调度线程池,此时不可调度)
线程的死亡:
当线程的任务结束,发生异常,或者是强制退出这三种情况会导致线程的死亡。
线程死亡后,线程对象从内存中移除。
二、代码示例
代码示例1:
// YYViewController.m #import "YYViewController.h" @interface YYViewController () @property(nonatomic,strong)NSThread *thread; @end @implementation YYViewController - (void)viewDidLoad { [super viewDidLoad]; //创建线程 self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil]; //设置线程的名称 [self.thread setName:@"线程A"]; } //当手指按下的时候,开启线程 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //开启线程 [self.thread start]; } -(void)test { //获取线程 NSThread *current=[NSThread currentThread]; NSLog(@"test---打印线程---%@",self.thread.name); NSLog(@"test---线程开始---%@",current.name); //设置线程阻塞1,阻塞2秒 NSLog(@"接下来,线程阻塞2秒"); [NSThread sleepForTimeInterval:2.0]; //第二种设置线程阻塞2,以当前时间为基准阻塞4秒 NSLog(@"接下来,线程阻塞4秒"); NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0]; [NSThread sleepUntilDate:date]; for (int i=0; i<20; i++) { NSLog(@"线程--%d--%@",i,current.name); } NSLog(@"test---线程结束---%@",current.name); } @end
打印查看:
代码示例2(退出线程):
// // YYViewController.m // 04-NSThread02-线程的状态 // // Created by apple on 14-6-23. // Copyright (c) 2014年 itcase. All rights reserved. // #import "YYViewController.h" @interface YYViewController () @property(nonatomic,strong)NSThread *thread; @end @implementation YYViewController - (void)viewDidLoad { [super viewDidLoad]; //创建线程 self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil]; //设置线程的名称 [self.thread setName:@"线程A"];} //当手指按下的时候,开启线程 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //开启线程 [self.thread start]; } -(void)test { //获取线程 NSThread *current=[NSThread currentThread]; NSLog(@"test---打印线程---%@",self.thread.name); NSLog(@"test---线程开始---%@",current.name); //设置线程阻塞1,阻塞2秒 NSLog(@"接下来,线程阻塞2秒"); [NSThread sleepForTimeInterval:2.0]; //第二种设置线程阻塞2,以当前时间为基准阻塞4秒 NSLog(@"接下来,线程阻塞4秒"); NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0]; [NSThread sleepUntilDate:date]; for (int i=0; i<20; i++) { NSLog(@"线程--%d--%@",i,current.name); if (5==i) { //结束线程 [NSThread exit]; } } NSLog(@"test---线程结束---%@",current.name);} @end
打印示例:
注意:人死不能复生,线程死了也不能复生(重新开启),如果在线程死亡之后,再次点击屏幕尝试重新开启线程,则程序会挂。
0 0
- ios开发多线程篇——线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程篇—NSThread及线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程-线程的状态
- iOS开发多线程—06线程的状态
- iOS 多线程篇6—线程的状态
- iOS多线程-------线程的状态
- ios开发多线程篇——线程间的通信
- iOS开发多线程篇—线程间的通信
- iOS开发多线程篇—线程间的通信
- iOS开发多线程篇—线程间的通信
- iOS开发多线程篇—线程间的通信
- 基于upstart机制系统会话的理解
- bestcoder Mutiple
- 安卓面试题系列-6
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- 策略为王编译错误2:error C1189: #error : MFC does not support
- iOS开发多线程篇—线程的状态
- tomcat+jsp+javaBean搭配
- 安卓面试题系列-7
- linux应用开发-设计静态库
- linux自动以root登录,并自动启动用户程序的设置方法(适合sysVinit启动机制)
- automake安装入门
- 前端--笔试(个人实习)第二篇
- pandas 数据分析入门
- SAE微信公众号PHP SDK, token一直验证失败的解决方法