iOS多线程-NSThread

2021-08-24  本文已影响0人  雪影无痕

·NSThread 每个NSThread对象对应一个线程,量级较轻

·优点:NSThread 比其他两个轻量级,使用简单

·缺点:需要自己管理线程的生命周期、线程同步、加锁、睡眠以及唤醒等。线程同步对数据的加锁会有一定的系统开销

//    创建方式一,有线程对象,需手段开启线程

    NSThread *thread = [[NSThread alloc] initWithTarget:selfselector:@selector(threadAc1:) object:@"thread1"];

    thread.name=@"thread1";

    //手动开启线程

    [threadstart];

    //线程的大小

//    thread.stackSize

    //方式二:没有创建线程对象,自动开启线程

    [NSThread detachNewThreadSelector:@selector(threadAc2:) toTarget:self withObject:@"thread2"];

    //方式三:block创建方式没有创建线程对象,自动开启线程

    [NSThread detachNewThreadWithBlock:^{

        for(inti =0; i <50; i ++) {

            NSLog(@"thread3:%d",i);

        }

    }];

//    方式四

    [selfperformSelectorInBackground:@selector(threadAc3:) withObject:@"3"];

    //回到主线程设置UI

    [self performSelectorOnMainThread:@selector(threadAc4:) withObject:@"4" waitUntilDone:YES];

}

- (void)threadAc1:(NSString*)str{

    NSLog(@"线程%@",[NSThread currentThread]);

    for(inti =0; i <50; i ++) {

        NSLog(@"thread1:%d",i);

        if(i ==20) {

            //休眠2秒后开始执行

            [NSThread sleepForTimeInterval:2];

        }elseif(i ==40){

            //退出线程

            [NSThreadexit];

        }

    }

    //当前线程是否是多线程

    if ([NSThread isMultiThreaded]) {

        NSLog(@"开启多线程了%@ ",str);

    }

    //当前线程是否为主线程

//    [NSThread isMainThread];

}

- (void)threadAc2:(NSString*)str{

    NSLog(@"线程%@",[NSThread currentThread]);

    for(inti =0; i <50; i ++) {

        NSLog(@"thread2:%d",i);

    }

    if ([NSThread isMultiThreaded]) {

        NSLog(@"开启多线程了%@ ",str);

    }

}

- (void)threadAc3:(NSString*)str{

    NSLog(@"线程%@",[NSThread currentThread]);

    for(inti =0; i <50; i ++) {

        NSLog(@"thread3:%d",i);

    }

    if ([NSThread isMultiThreaded]) {

        NSLog(@"开启多线程了%@ ",str);

    }

}

- (void)threadAc4:(NSString*)str{

    NSLog(@"线程%@",[NSThread currentThread]);

    for(inti =0; i <50; i ++) {

        NSLog(@"thread4:%d",i);

    }

    if ([NSThread isMultiThreaded]) {

        NSLog(@"开启多线程了%@ ",str);

    }

}

上一篇下一篇

猜你喜欢

热点阅读