[OC] 线程 dispatch_group_t
2024-08-30 16:14:04
- (void)groupEvent{
//创建线程
dispatch_group_t group =dispatch_group_create();
dispatch_queue_t globalQueue=dispatch_get_global_queue(, ); dispatch_group_enter(group); //模拟多线程耗时操作
dispatch_group_async(group, globalQueue, ^{
sleep();
NSLog(@"%@---block1结束。。。",[NSThread currentThread]);
dispatch_group_leave(group);
}); NSLog(@"%@---1NSLOG结束。。。",[NSThread currentThread]); dispatch_group_enter(group);
//模拟多线程耗时操作
dispatch_group_async(group, globalQueue, ^{
sleep();
NSLog(@"%@---block2结束。。。",[NSThread currentThread]);
dispatch_group_leave(group);
}); NSLog(@"%@---2NSLOG结束。。。",[NSThread currentThread]);
//线程全部结束
dispatch_group_notify(group, dispatch_get_global_queue(, ), ^{
NSLog(@"%@---全部结束。。。",[NSThread currentThread]);
}); }
上面的代码的后台输出是:
-- ::27.853 CPMNetworking[:] <NSThread: 0x600000068600>{number = , name = main}---1NSLOG结束。。。
-- ::27.856 CPMNetworking[:] <NSThread: 0x600000068600>{number = , name = main}---2NSLOG结束。。。
-- ::30.923 CPMNetworking[:] <NSThread: 0x608000263f00>{number = , name = (null)}---block1结束。。。
-- ::30.930 CPMNetworking[:] <NSThread: 0x6000002647c0>{number = , name = (null)}---block2结束。。。
-- ::30.930 CPMNetworking[:] <NSThread: 0x6000002647c0>{number = , name = (null)}---全部结束。。。
可以发现,因为block内被加了休眠sleep,所以block外的NSLOG操作被先执行了。而在block1被执行完毕后,block2和线程结束的部分的内容才被执行
最新文章
- 反编译apk
- 01 Linux入门介绍
- How to (seriously) read a scientific paper
- HTTP状态码(响应码)
- JAVA读取XML文件数据
- Qt之镜像旋转
- LoadRunner学习记录--安装遇到的问题一
- Apache+php+mysql+phpadmin搭建
- javascript图片延迟加载(转载)
- QT QTextBrowser
- Python中的re模块--正则表达式
- css 自制一些小特效
- Mac os系统gdb调试器的安装与使用
- springboot(二十三)Springboot2.X响应式编程
- UI5-学习篇-17-云端WEB IDE开发
- centos7 Linux 安装jdk1.8
- 996.icu 事件后
- 从ext4将mysql数据目录移动至lustre出现(InnoDB: Unable to lock ./ibdata1, error: 38.)
- ssh连接linux服务器不断开- ";Write failed: Broken pipe";
- lambda表达式/对象引用计数