zoukankan      html  css  js  c++  java
  • IOS 多线程-NSThread 和线程状态

    @interface HMViewController ()
    - (IBAction)btnClick;
    
    @end
    
    @implementation HMViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    
    - (IBAction)btnClick {
        // 1.获得当前的线程
        NSThread *current = [NSThread currentThread];
        NSLog(@"btnClick---%@", current);
        
    //    NSThread *main = [NSThread mainThread];
    //    NSLog(@"btnClick---%@", main);
        
        // 2.执行一些耗时操作 : 创建一条子线程
        [self threadCreate];
    }
    
    - (void)run:(NSString *)param
    {
        NSThread *current = [NSThread currentThread];
        
        for (int i = 0; i<10000; i++) {
            NSLog(@"%@----run---%@", current, param);
        }
    }
    
    /**
     * NSThread的创建方式
     * 隐式创建线程, 并且直接(自动)启动
     */
    - (void)threadCreate3
    {
        // 在后台线程中执行 === 在子线程中执行
        [self performSelectorInBackground:@selector(run:) withObject:@"abc参数"];
    }
    
    /**
     * NSThread的创建方式
     * 创建完线程直接(自动)启动
     */
    - (void)threadCreate2
    {
        [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"我是参数"];
    }
    
    /**
     * NSThread的创建方式
     * 1> 先创建初始化线程
     * 2> start开启线程
     */
    - (void)threadCreate
    {
        NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"哈哈"];
        thread.name = @"线程A";
        // 开启线程
        [thread start];
        
        NSThread *thread2 = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"哈哈"];
        thread2.name = @"线程B";
        // 开启线程
        [thread2 start];
    }
    @end

     线程的状态

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        self.thread = [[NSThread alloc] initWithTarget:self selector:@selector(test) object:nil];
        self.thread.name = @"线程A";
    }
    
    - (void)test
    {
        NSLog(@"test - 开始 - %@", [NSThread currentThread].name);
        
    //    [NSThread sleepForTimeInterval:5]; // 阻塞状态
        
    //    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:5.0];
    //    [NSThread sleepUntilDate:date];
        
        for (int i = 0; i<1000; i++) {
            NSLog(@"test - %d - %@", i, [NSThread currentThread].name);
            
            if (i == 50) {
                [NSThread exit];
            }
        }
        
        NSLog(@"test - 结束 - %@", [NSThread currentThread].name);
    }
  • 相关阅读:
    bzoj2002: [Hnoi2010]Bounce 弹飞绵羊 [分块][LCT]
    luoguP1886 滑动窗口 [单调队列]
    bzoj1047: [HAOI2007]理想的正方形
    bzoj1012: [JSOI2008]最大数maxnumber [单调队列]
    树与二叉树之二--二叉树的性质与存储
    树与二叉树之一--基本概念与存储结构
    Markdown段首空格
    C++ atan2
    凸包学习笔记
    Codeforces Round #545 (Div. 1) E. Train Car Selection
  • 原文地址:https://www.cnblogs.com/liuwj/p/6601940.html
Copyright © 2011-2022 走看看