iOS 多线程篇6—线程的状态

转载 2016年05月30日 18:57:51

一、简单介绍

1. 线程的创建:

 self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];

说明:创建线程有多种方式,这里不做过多的介绍。

image

2. 线程的开启:

[self.thread start];

image

3. 线程的运行和阻塞:

(1)设置线程阻塞1,阻塞2秒

    [NSThread sleepForTimeInterval:2.0];

(2)第二种设置线程阻塞2,以当前时间为基准阻塞4秒

    NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0];

    [NSThread sleepUntilDate:date];

线程处理阻塞状态时在内存中的表现情况:(线程被移出可调度线程池,此时不可调度)

image

4.线程的死亡:

当线程的任务结束,发生异常,或者是强制退出这三种情况会导致线程的死亡。

image

线程死亡后,线程对象从内存中移除。

image

二、代码示例

代码示例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=0; i<20; i++) {
        NSLog(@"线程--%d--%@",i,current.name);

    }
        NSLog(@"test---线程结束---%@",current.name);
}

@end

打印查看:
image

代码示例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

打印示例:
image

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

image

VB6多线程探秘

VB6稳定多线程,一直是争论很大的的。 比较稳定的多线程,一般使用 set MT=CreateObject("VbMT.MT") 但其他单元线程之间,是无法访问的,只有在创建者中,才可使用该对象...
  • test2002
  • test2002
  • 2016年09月08日 17:33
  • 1229

线程之间状态和转换

线程创建之后并不是直接开始运行的,而是分了各种状态以便于管理,这样想,cpu就一个,及时你的电脑是4核或者8核,那么也只能同时运行这么多,但是你开启的线程那么多,怎么保证每个都运行呢,那么就必须进行管...
  • lovergo
  • lovergo
  • 2016年11月21日 15:23
  • 573

线程的五大状态

线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。     1.新建状态(New):          当用new操作符创建一个线程时,...
  • peter_teng
  • peter_teng
  • 2013年08月22日 19:56
  • 118147

Java线程的5种状态及切换(透彻讲解)

Java中的线程的生命周期大体可分为5种状态。 1. 新建(NEW):新创建了一个线程对象。 2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的star...
  • pange1991
  • pange1991
  • 2016年12月24日 16:57
  • 7083

理解Python并发编程一篇就够了|线程篇

前言 编程的乐趣之一是想办法让程序执行的越来越快,代码越写越优雅。在刚开始学习并发编程时,相信你它会有一些困惑,本来这是一篇解释多个并发开发的问题并帮助你快速了解并发编程的不同场景和应该使用的解...
  • chenlei_525
  • chenlei_525
  • 2016年12月23日 13:52
  • 474

iOS的三种多线程技术 对比分析

1.iOS的三种多线程技术                     1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发...
  • fhbystudy
  • fhbystudy
  • 2014年04月10日 17:07
  • 10527

IOS三种多线程详解

iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使...
  • MouXiaoxiong
  • MouXiaoxiong
  • 2016年08月16日 15:03
  • 1770

iOS中的多线程一般使用场景

在IOS开发中为提高程序的运行效率会将比较耗时的操作放在子线程中执行,iOS系统进程默认启动一个主线程,用来响应用户的手势操作以及UI刷新,因此主线程又叫做UI线程。 前面的Blog说明了NSThr...
  • jiandanjinxin
  • jiandanjinxin
  • 2016年01月21日 16:08
  • 2939

IOS开发之多线程详解

在学习ios多线程之前,我们得先知道两个概念,进程和线程:进程: 进程是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。线程: 1个进程要想执行...
  • u013672551
  • u013672551
  • 2015年08月10日 11:50
  • 793

iOS中保证线程安全的几种方式与性能对比

iOS中保证线程安全的几种方式与性能对比
  • opentogether
  • opentogether
  • 2016年09月08日 15:59
  • 1176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 多线程篇6—线程的状态
举报原因:
原因补充:

(最多只允许输入30个字)