iOS开发多线程篇—线程的状态
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:
//
// 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=; i<; 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=; i<; i++) {
NSLog(@"线程--%d--%@",i,current.name);
if (==i) {
//结束线程
[NSThread exit];
} }
NSLog(@"test---线程结束---%@",current.name);
} @end
打印示例:

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

iOS开发多线程篇—线程的状态的更多相关文章
- iOS开发多线程篇—线程安全
iOS开发多线程篇—线程安全 一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块 ...
- iOS开发多线程篇—线程间的通信
iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任 ...
- iOS开发多线程篇—线程间的通信(转)
这里转载 给自己一个备份 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转 ...
- iOS开发多线程篇 04 —线程间的通信
iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任 ...
- iOS开发多线程篇 03 —线程安全
iOS开发多线程篇—线程安全 一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块 ...
- iOS开发多线程篇—创建线程
iOS开发多线程篇—创建线程 一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建.启动线程 (1) NSThread *thread = [[NSThread alloc] in ...
- iOS开发多线程篇—NSOperation基本操作
iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. ...
- iOS开发多线程篇 10 —NSOperation基本操作
iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. ...
- iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...
随机推荐
- Android安装失败 Installation error code: -110
在系统开发过程中,开发的app管理器,发现怎么安装都是失败. 详细的查看了log发现. I/ActivityManager( 899): START {dat=file:///mnt/sdcard/ ...
- windows平台(不包括ARM的CE)通用的压缩和解压缩
通用是相对的,这里指的是xp和win7(其他版本我没测试过,不要用不要来找我) #define CMP_FRM COMPRESSION_FORMAT_LZNT1|COMPRESSION_ENGINE_ ...
- Dynamics AX 2012 R3 Demo 安装与配置 - 导入测试数据 (Step 4)
在前面三节中,Reinhard分别讲解了如何配置安装环境,安装数据库服务器,AOS和客户端,安装后的编译和配置.如果一直跟随Reinhard的脚步,到这里,已经拥有一个没有数据的系统. ...
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
本文内容转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人一.先简单回答两个问题:1.PHP 可以开发客户端?答:不可以, ...
- Intent 匹配规则
1.在AndroidManifest.xml中可以为 每个 Activity,Service 设置多个Intent-Filter; 在系统启动和程序安装之后,android会收集AndroidMani ...
- Android first---文件读取(登录案例编写为主)
以android登录案例来介绍文件的读取与androidAPI给予的方法 第一步:绘制界面 绘制方法:在线性布局下面设置相对布局 代码部分: <LinearLayout xmlns:androi ...
- Linux 各文件夹介绍
http://www.cnblogs.com/amboyna/archive/2008/02/16/1070474.html linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命 ...
- 使用VB6制作RTD函数
以前模仿大神在vs里使用c#实现RTD函数功能.(真是很生僻的东东啊)C#制作RTD参考:大神博客跳转.最近想VB里能不能做?就试着做了做,好像基本成了,整套代码有些毛病,勉强能算个样子,暂时不打算再 ...
- 深入浅出设计模式——代理模式(Proxy Pattern)
模式动机在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用.代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到 ...
- Java面向对象三大特点之封装
封装 含义:将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对客户隐藏其实现细节,这就是封装的思想.封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的 ...