zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    jQuery 集合 搜索操作(父辈元素搜索、同辈元素搜索、子元素搜索)
    struts <s:form action=""> 和 <s:submit action=""> 的区别
    654. 最大二叉树
    701. 二叉搜索树中的插入操作
    617. 合并二叉树
    98. 验证二叉搜索树
    236. 二叉树的最近公共祖先
    700. 二叉搜索树中的搜索
    235. 二叉搜索树的最近公共祖先
    105. 从前序与中序遍历序列构造二叉树
  • 原文地址:https://www.cnblogs.com/yaowen/p/7491262.html
Copyright © 2011-2022 走看看