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);
    }
  • 相关阅读:
    基于Tags实现内容推荐的方法(代码)
    洞察未来
    技术人员工作原则
    罗辑思维CEO脱不花:关于工作和成长,这是我的121条具体建议
    王兴:8年时间,我对商业的思考
    100个管理定律
    李想:关于工作和成长,这是我的100条具体建议 |【经纬低调分享】
    C++--win32
    谈谈javaSE中的==和equals的联系与区别
    Vue 基础知识
  • 原文地址:https://www.cnblogs.com/liuwj/p/6601940.html
Copyright © 2011-2022 走看看