文档章节

第01天多线程网络:(08):线程的状态(了解)

宇鸿165
 宇鸿165
发布于 2017/04/15 09:53
字数 957
阅读 2
收藏 0

#####一、线程的状态(了解)

 线程的状态

 新建 : New
 就绪 : Runnable (作用 : 使用CPU调度当前线程)
 运行 : Running (作用 : 走阻塞、死亡、和就绪来回切换[使用CPU调度其他线程])
 阻塞 : Block(作用:回归就绪) 【调用sleep方法、等待同步锁】
 死亡 : Dead (线程任务执行完毕、异常、强制退出)

  • 1.新建状态创建一条线程就是处于新建状态使用系统的方法NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(task) object:nil];
    NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(task) object:nil];
  • 2.就绪与运行状态来回切换(调用系统的启动线程方法)[thread start];
 // 2.启动线程 , 处于就绪状态  和 运行状态来回切换
    [thread start];
  • 3.阻塞状态(让线程在什么时候结束)[NSThread sleepForTimeInterval:2.0];或者[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:3.0]];
#pragma  mark 阻塞状态
#pragma  阻塞状态 方法1 + (void)sleepForTimeInterval:(NSTimeInterval)ti; 睡多少秒
    /*
     Description
     Sleeps the thread for a given time interval.
     No run loop processing occurs while the thread is blocked.
     Parameters
     ti
     The duration of the sleep.
     Availability	iOS (2.0 and later), macOS (10.5 and later), tvOS (9.0 and later), watchOS (2.0 and later)
     */
//    [NSThread sleepForTimeInterval:2.0];

    
#pragma  阻塞状态 方法2      + (void)sleepUntilDate:(NSDate *)date; 睡到什么时候
    /**
     + (void)sleepUntilDate:(NSDate *)date;
     Description
     Blocks the current thread until the time specified.
     No run loop processing occurs while the thread is blocked.
     Parameters
     aDate
     The time at which to resume processing.
     Availability	iOS (2.0 and later), macOS (10.0 and later), tvOS (9.0 and later), watchOS (2.0 and later)
     */
    
    // dateWithTimeIntervalSinceNow(日期与时间间隔) 从当前时间开始 几秒之后
    [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:3.0]];
    /**
     11:32:32.649
     11:32:35.653
     */
    NSLog(@"-- end --");
  • 4.死亡状态:强制退出线程使用系统的[NSThread exit];执行完毕线程在for循环里面当到那个值就结束break; // 表示任务已经执行完毕了, 自动进入死亡状态
- (void)task
{
    for (int i = 0; i < 100; i++)
    {
        NSLog(@"%zd --- %@",i,[NSThread currentThread]);
        
        
        if (i == 20) {
#pragma mark 强制退出线程(释放掉了) exit
            // [NSThread exit]; // 退出当前线程 (强制进入死亡状态)
            
            // 在for循环里面可以使用break.当时有区别的
            break; // 表示任务已经执行完毕了, 自动进入死亡状态
        }
        
    }
}

code

/**
 线程的状态
 新建 : New

 就绪 : Runnable (作用 : 使用CPU调度当前线程)
 运行 : Running (作用 : 走阻塞、死亡、和就绪来回切换[使用CPU调度其他线程])
 阻塞 : Block(作用:回归就绪) 【调用sleep方法、等待同步锁】
 死亡 : Dead (线程任务执行完毕、异常、强制退出)
 
 */

#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(run:) object:@"lyh"];
    NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(task) object:nil];
    
    // 2.启动线程 , 处于就绪状态  和 运行状态来回切换
    [thread start];
}

- (void)run:(NSString *)parma
{
    NSLog(@"%s,%@,%@",__func__,[NSThread currentThread],parma);
    
    
// 阻塞状态
#pragma  mark 阻塞状态
#pragma  阻塞状态 方法1 + (void)sleepForTimeInterval:(NSTimeInterval)ti; 睡多少秒
    /*
     Description
     Sleeps the thread for a given time interval.
     No run loop processing occurs while the thread is blocked.
     Parameters
     ti
     The duration of the sleep.
     Availability	iOS (2.0 and later), macOS (10.5 and later), tvOS (9.0 and later), watchOS (2.0 and later)
     */
//    [NSThread sleepForTimeInterval:2.0];

    
#pragma  阻塞状态 方法2      + (void)sleepUntilDate:(NSDate *)date; 睡到什么时候
    /**
     + (void)sleepUntilDate:(NSDate *)date;
     Description
     Blocks the current thread until the time specified.
     No run loop processing occurs while the thread is blocked.
     Parameters
     aDate
     The time at which to resume processing.
     Availability	iOS (2.0 and later), macOS (10.0 and later), tvOS (9.0 and later), watchOS (2.0 and later)
     */
    
    // dateWithTimeIntervalSinceNow(日期与时间间隔) 从当前时间开始 几秒之后
    [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:3.0]];
    /**
     11:32:32.649
     11:32:35.653
     */
    NSLog(@"-- end --");
}

- (void)task
{
    for (int i = 0; i < 100; i++)
    {
        NSLog(@"%zd --- %@",i,[NSThread currentThread]);
        
        
        if (i == 20) {
#pragma mark 强制退出线程(释放掉了) exit
            // [NSThread exit]; // 退出当前线程 (强制进入死亡状态)
            
            // 在for循环里面可以使用break.当时有区别的
            break; // 表示任务已经执行完毕了, 自动进入死亡状态
        }
        
    }
}
@end

© 著作权归作者所有

宇鸿165
粉丝 1
博文 919
码字总数 368963
作品 0
广州
私信 提问
Python标准库08 多线程与同步 (threading包)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Python主要通过标准库中的threading包来实现多线程。在当今网络时代,每个服务器都会接收到大量的请求...

osDaniel
2014/09/21
30
0
java学习计划

源于传智播客毕向东老师的教学计划: day01-01-基本常识 day01-02-Java的跨平台性 day01-03-Java环境搭建(安装) day01-04-Java环境搭建(环境变量配置) day01-05-Java环境搭建(环境变量配置技...

Bony
2016/05/14
60
0
iOS开发之多线程技术(NSThread、OperationQueue、GCD)

在前面的博客中如果用到了异步请求的话,也是用到的第三方的东西,没有正儿八经的用过iOS中多线程的东西。其实多线程的东西还是蛮重要的,如果对于之前学过操作系统的小伙伴来说,理解多线程...

小近
2014/11/13
887
1
@synchronized的作用和用法

synchronized 单词的意思是同步的,同步化的,使协调 作用: @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改,保证代码的安全性。也就是包装这段代码是原子...

鄂北
2018/08/30
0
0
JAVA之旅(十二)——Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口

JAVA之旅(十二)——Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口 开始挑战一些难度了,线程和I/O方面的操作了,继续坚持 一.Thread 如...

刘桂林
2016/06/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
4
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
10
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
8
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部