• 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]);
            }
        });
    }
  • 相关阅读:
    Found class xxx.xxx.xxx, but interface was expected
    String的length()和getBytes().length
    springboot shutdown(停机)
    关于Java代码简化的小技巧
    数据库的简单查询
    数据库TSQL语句
    环境搭建及wamp空密码修改
    js windows对象
    JS函数的其他用法【备于取用】
    js递归
  • 原文地址:https://www.cnblogs.com/ZhangShengjie/p/12269185.html
Copyright © 2020-2023  润新知