ios32---线程的状态

简介:
复制代码
//
//  ViewController.m
//  04-了解-线程的状态
//
//  创建线程是处于新建状态,start是就绪状态,会放入到可调度线程池里面(cpu看线程是否可以调用,是看线程是否在可调度线程池里面),cpu调度他的时候就会进入运行状态,当这个线程的时间片用完之后,进入就绪状态。所以调用了start方法之后,线程会在运行状态和就绪状态之间进行来回的切换。当线程调用sleep方法时候会进入阻塞状态,进入阻塞状态的线程是不可以工作的,进入阻塞状态时候线程会从可调度线程池里面移除出来到内存里面。此时这个线程还存在只不过cpu不会调用他而已,当sleep时间到了之后,会又移入可调度线程池中进入就绪状态,当cpu调用的时候又会进入运行状态。
//  当线程里面的任务执行完或者异常退出了之后进入死亡状态,死亡会移除可调用线程池,并且从内存释放,不会做任何事情不要想着重新启动线程。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //1.创建线程,新建状态,
    NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(task) object:nil];
    //2.启动线程,就绪状态,放入可执行线程池里面。<---->运行
    [thread start];
}

-(void)run  //run方法执行完毕是死亡状态。
{
    NSLog(@"run----%@",[NSThread currentThread]);
    
    //阻塞线程
    [NSThread sleepForTimeInterval:2.0];//睡2秒,进入阻塞状态,移除可执行线程池。不能执行任何操作。
    [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:3.0]];//睡3秒,进入阻塞状态,移除可执行线程池。不能执行任何操作。
    NSLog(@"end---");
}

-(void)task
{
    for (NSInteger i = 0; i<100 ;i++) {
        NSLog(@"%zd---%@",i,[NSThread currentThread]);
        
        if (i == 20) {
            [NSThread exit];  //退出当前线程,死亡状态。不要想着重新启动线程。
            break;              //break退出任务,表示任务已经执行完毕,线程也死亡了。
        }
    }
}

@end
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7491262.html,如需转载请自行联系原作者

相关文章
|
7月前
|
iOS开发
iOS多线程之NSOperationQueue-依赖、并发数、优先级、自定义Operation等最全的使用总结
iOS多线程之NSOperationQueue-依赖、并发数、优先级、自定义Operation等最全的使用总结
220 0
|
7月前
|
安全 调度 C语言
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
489 1
|
11月前
|
安全 算法 编译器
iOS线程安全——锁(二)
iOS线程安全——锁(二)
119 0
|
11月前
|
存储 安全 API
iOS线程安全——锁(一)
iOS线程安全——锁(一)
210 0
|
iOS开发
iOS多线程的初步研究-- dispatch同步
GCD提供两种方式支持dispatch队列同步,即dispatch组和信号量。
147 0
|
API iOS开发
iOS多个线程发起相同请求,避免重复
有时候在调用多个模块时,会对同一个API进行多次请求,但因为内容都是一样的,所以最好就是加上锁,防止重复请求造成网络资源浪费
152 0
|
敏捷开发 安全 Unix
iOS开发 - 在实战中挖掘之线程间的通信方式
iOS开发 - 在实战中挖掘之线程间的通信方式
154 0
|
程序员 C语言 iOS开发
iOS的三种多线程技术
iOS的三种多线程技术
182 0
|
调度 C++ iOS开发
IOS_多线程
IOS_多线程
88 0
|
iOS开发
ios多线程
ios多线程
61 0