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

简介:

一、简单介绍

线程的创建:

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:

复制代码
 1 //  2 // YYViewController.m
 3 // 04-NSThread02-线程的状态
 4 //  5 // Created by apple on 14-6-23.
 6 // Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8  9 #import "YYViewController.h" 10 11 @interface YYViewController ()
12 @property(nonatomic,strong)NSThread *thread;
13 14 @end 15 16 @implementation YYViewController
17 18 - (void)viewDidLoad
19 {
20  [super viewDidLoad];
21 22 //创建线程 23 self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];
24 //设置线程的名称 25 [self.thread setName:@"线程A"];
26 }
27 //当手指按下的时候,开启线程 28 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 29 {
30 //开启线程 31  [self.thread start];
32 }
33 34 -(void)test
35 {
36 //获取线程 37 NSThread *current=[NSThread currentThread];
38 NSLog(@"test---打印线程---%@",self.thread.name);
39 NSLog(@"test---线程开始---%@",current.name);
40 41 //设置线程阻塞1,阻塞2秒 42 NSLog(@"接下来,线程阻塞2秒");
43 [NSThread sleepForTimeInterval:2.0];
44 45 //第二种设置线程阻塞2,以当前时间为基准阻塞4秒 46 NSLog(@"接下来,线程阻塞4秒");
47 NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0];
48  [NSThread sleepUntilDate:date];
49 for (int i=0; i<20; i++) {
50 NSLog(@"线程--%d--%@",i,current.name);
51 52  }
53 NSLog(@"test---线程结束---%@",current.name);
54 }
55 56 @end
复制代码

打印查看:

代码示例2(退出线程):

复制代码
 1 //  2 // YYViewController.m
 3 // 04-NSThread02-线程的状态
 4 //  5 // Created by apple on 14-6-23.
 6 // Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8  9 #import "YYViewController.h" 10 11 @interface YYViewController ()
12 @property(nonatomic,strong)NSThread *thread;
13 14 @end 15 16 @implementation YYViewController
17 18 - (void)viewDidLoad
19 {
20  [super viewDidLoad];
21 22 //创建线程 23 self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];
24 //设置线程的名称 25 [self.thread setName:@"线程A"];
26 }
27 //当手指按下的时候,开启线程 28 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 29 {
30 //开启线程 31  [self.thread start];
32 }
33 34 -(void)test
35 {
36 //获取线程 37 NSThread *current=[NSThread currentThread];
38 NSLog(@"test---打印线程---%@",self.thread.name);
39 NSLog(@"test---线程开始---%@",current.name);
40 41 //设置线程阻塞1,阻塞2秒 42 NSLog(@"接下来,线程阻塞2秒");
43 [NSThread sleepForTimeInterval:2.0];
44 45 //第二种设置线程阻塞2,以当前时间为基准阻塞4秒 46 NSLog(@"接下来,线程阻塞4秒");
47 NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0];
48  [NSThread sleepUntilDate:date];
49 for (int i=0; i<20; i++) {
50 NSLog(@"线程--%d--%@",i,current.name);
51 if (5==i) {
52 //结束线程 53  [NSThread exit];
54  }
55 56  }
57 NSLog(@"test---线程结束---%@",current.name);
58 }
59 60 @end
复制代码

打印示例:

注意:人死不能复生,线程死了也不能复生(重新开启),如果在线程死亡之后,再次点击屏幕尝试重新开启线程,则程序会挂。

目录
相关文章
|
1天前
|
Java 数据库
【Java多线程】对线程池的理解并模拟实现线程池
【Java多线程】对线程池的理解并模拟实现线程池
14 1
|
1天前
|
设计模式 消息中间件 安全
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
11 0
|
1天前
|
Java
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
22 1
|
1天前
|
存储 缓存 安全
【Java多线程】线程安全问题与解决方案
【Java多线程】线程安全问题与解决方案
18 1
|
1天前
|
Java 调度
【Java多线程】线程中几个常见的属性以及状态
【Java多线程】线程中几个常见的属性以及状态
13 0
|
1天前
|
Java 调度
【Java多线程】对进程与线程的理解
【Java多线程】对进程与线程的理解
13 1
|
1天前
|
存储 安全 Java
【探索Linux】P.21(多线程 | 线程同步 | 条件变量 | 线程安全)
【探索Linux】P.21(多线程 | 线程同步 | 条件变量 | 线程安全)
13 0
|
iOS开发 索引 Perl
iOS 开发创建CocoaPods公有库以及subspec分支功能(下)
iOS 开发创建CocoaPods公有库以及subspec分支功能
385 0
iOS 开发创建CocoaPods公有库以及subspec分支功能(下)
|
开发框架 开发工具 数据安全/隐私保护
iOS 开发创建CocoaPods公有库以及subspec分支功能(上)
iOS 开发创建CocoaPods公有库以及subspec分支功能
337 0
iOS 开发创建CocoaPods公有库以及subspec分支功能(上)
|
测试技术 网络架构 iOS开发
iOS开发中WiFi相关功能总结
1.Ping域名、Ping某IP 有时候可能会遇到ping 某个域名或者ip通不通,再做下一步操作。这里的ping与传统的做get或者post请求还是有很大区别的。比如我们连接了某个WiFi,测试ping www.baidu.com,如果能ping 通,基本可以断定可以上网了,但是如果我们做了一个get 请求(url 是www.baidu.com),路由器可能重定
1874 0