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
打印示例:

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

iOS多线程编程之线程的状态(转载)的更多相关文章
- iOS多线程编程:线程同步总结
1:原子操作 - OSAtomic系列函数 iOS平台下的原子操作函数都以OSAtomic开头,使用时需要包含头文件<libkern/OSBase.h>.不同线程如果通过原子操作函数对同一 ...
- iOS多线程编程之线程间的通信(转载)
一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 ...
- .NET面试题解析(07)-多线程编程与线程同步
系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 关于线程的知识点其实是很多的,比如多线程编程.线程上下文.异步编程.线程同步构造.GUI的跨线程访问等等, ...
- .NET面试题解析(07)-多线程编程与线程同步 (转)
http://www.cnblogs.com/anding/p/5301754.html 系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 关于线程的知识点其实 ...
- iOS多线程编程指南
iOS多线程编程指南(拓展篇)(1) 一.Cocoa 在Cocoa上面使用多线程的指南包括以下这些: (1)不可改变的对象一般是线程安全的.一旦你创建了它们,你可以把这些对象在线程间安全的传递.另一方 ...
- iOS多线程编程原理及实践
摘要:iOS开发中,开发者不仅要做好iOS的内存管理,而且如果你的iOS涉及多线程,那你也必须了解iOS编程中对多线程的限制,iOS主线程的堆栈大小为1M,其它线程均为512KB,且这个限制开发者是无 ...
- Python中的多线程编程,线程安全与锁(一)
1. 多线程编程与线程安全相关重要概念 在我的上篇博文 聊聊Python中的GIL 中,我们熟悉了几个特别重要的概念:GIL,线程,进程, 线程安全,原子操作. 以下是简单回顾,详细介绍请直接看聊聊P ...
- C#多线程编程实例 线程与窗体交互
C#多线程编程实例 线程与窗体交互 代码: public partial class Form1 : Form { //声明线程数组 Thread[] workThreads = ]; public ...
- vc 基于对话框多线程编程实例——线程之间的通信
vc基于对话框多线程编程实例——线程之间的通信 实例:
随机推荐
- 页面倒计时跳转页面效果,js倒计时效果
页面倒计时跳转页面效果,js倒计时效果 >>>>>>>>>>>>>>>>>>>> ...
- RF-获取上个月份
验证1: case ${NowDate} set variable 20170103 ${year} set variable ${NowDate[0:4]} ${month} set variabl ...
- Android5.x新特性之 Toolbar和Theme的使用
Toolbar 你还在为Android 的ActionBar的文字不能随意设置位置而烦恼么?你还在为ActionBar不能自定义添加自己的布局而烦恼么?现在告诉你一个好消息,当你看到这篇文章时,就不必 ...
- PowerDesigner学习笔记
首先是概念模型个物理模型的区别,概念模型,即ConceptualDataMode,是没和具体类型的数据库(如SQL Server.MySql)的对应,是一种抽象的,而物理模型是指定了某种具体类型的数据 ...
- 原:android4.2.2蓝牙源码阅读--bluedroid部分
概念: GKI:统一内核接口 BTE栈: BTU栈:BTU栈开始前必须调用BTE栈初始化 代码阅读: /external/bluetooth/bluedroid/hci/:HCI library实现 ...
- PHP一致性哈希实现。。
<?php /** *@author:xiaojiang 20140222 * 一致性哈希php 实现 */ class MyHash{ //虚拟节点数 private $_virtualCou ...
- Get方法和post方法有何不同?
Get方法和post方法有何不同? 在B/S应用程序中,前台与后台的数据交互,都是通过HTML中Form表单完成的.Form提供了两种数据传输的方式——get和post.虽然它们都 是数据的提交方式, ...
- 【EF框架】使用params参数传值防止SQL注入报错处理
通过SqlParameter传时间参数,代码如下: var param = new List<SqlParameter>(); param.Add(new SqlParameter(&qu ...
- Android Studio 调试系列之分析堆栈调用
Analyze a Stack Trace 方法:Thread.dumpStack() 一 代码中添加Thread.dumpStack() 二 Android Studio查看堆栈log 三 借助A ...
- 织梦导航条dropdown.js的改进(2013-7-10)
可以设置一个一直都显示的二级菜单,修复了没有二级菜单时鼠标移上去仍然显示上一个二级菜单的问题.支持一级菜单鼠标离开事件 html代码 <!DOCTYPE html PUBLIC "-/ ...