• iOS 多线程相关 线程组


    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
          dispatch_async(queue, ^{
              NSLog(@"1");
              //这句话的本质是往runloop中添加定时器
              [self performSelector:@selector(test) withObject:nil afterDelay:.0];
              NSLog(@"3");
              //若不启动runloop 子线程中是不会执行定时器的 打印结果为 1 3 执行了 打印结果为 1 3 2
              [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
          });
    }
    -(void)test{
        NSLog(@"2");
    }
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        NSThread *thred = [[NSThread alloc]initWithBlock:^{
            NSLog(@"1");
            //启动runloop 这时候runloop是处于休眠状态 等待后面给它发消息 ;如不执行 打印为1 并且崩溃 
            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantPast]];
        }];
        [thred start];
        [self performSelector:@selector(test) onThread:thred withObject:nil waitUntilDone:YES];
    }
    -(void)test{
        NSLog(@"2");
    }

    线程组

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        dispatch_queue_t queue = dispatch_queue_create("myqueue", DISPATCH_QUEUE_CONCURRENT);
        dispatch_group_t group = dispatch_group_create();
        
        dispatch_group_async(group, queue, ^{
            for (int i =0; i<5; i++) {
                NSLog(@"1-%@",[NSThread currentThread]);
            }
        });
        dispatch_group_async(group, queue, ^{
            for (int i =0; i<5; i++) {
                NSLog(@"2-%@",[NSThread currentThread]);
            }
        });
        
    //    dispatch_group_notify(group, queue, ^{
    //        dispatch_async(dispatch_get_main_queue(), ^{
    //            for (int i =0; i<5; i++) {
    //                NSLog(@"3-%@",[NSThread currentThread]);
    //            }
    //        });
    //    }); 等价于下面
        dispatch_group_notify(group, dispatch_get_main_queue(), ^{
            for (int i =0; i<5; i++) {
                NSLog(@"3-%@",[NSThread currentThread]);
            }
        });
    }
  • 相关阅读:
    前后端分类状态下SpringSecurity的玩法
    拓展 centos 7
    linux 日志管理
    Linux 内存监控
    Linux 周期任务
    Linux 文件系统
    linux 磁盘管理
    图论 最短路总结
    进阶线段树之乘法操作
    暑假集训Day 10 小烈送菜
  • 原文地址:https://www.cnblogs.com/ZhangShengjie/p/12269185.html
Copyright © 2020-2023  润新知