//总结如下:
//1.同步请求:不会开启新的线程
//1-1.同步请求--串行队列:不开启新线程--按照顺序执行下去
//1-2.同步请求--并发列队:不开启新线程--按照顺序执行下去 //2.异步请求:会开启新的线程
//2-1.异步请求--串行队列:开启一条新线程--按照顺序执行下去
//2-2.异步请求--并发队列:每条请求开启一条新线程--无顺序执行 //3.主线程
//主线程上面的请求都会在主线程上面执行
//3-1.异步请求:在主线程上面不会开启新的线程--按照顺序执行下去
//3-2.同步请求:卡死 当触发同步请求的时候会立即触发这个方法,但是上面的方法还需要往下面走,相互之间卡死了。 - (void)viewDidLoad {
[super viewDidLoad]; [self test8]; }
// <NSThread: 0x7fd2c3c088a0>{number = 1, name = main}
// 2><NSThread: 0x7fd2c3c14280>{number = 2, name = (null)}
// 4><NSThread: 0x7fd2c3c9a6a0>{number = 4, name = (null)}
// 3><NSThread: 0x7fd2c3e0c4b0>{number = 3, name = (null)}
// 1><NSThread: 0x7fd2c3e0d570>{number = 5, name = (null)}
// 5><NSThread: 0x7fd2c3c14280>{number = 2, name = (null)}
//异步队列--异步请求
//会创建新的线程--线程之间的执行时是并发的
-(void)test1{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 1><NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 2><NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 3><NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 4><NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 5><NSThread: 0x7fd5bac04910>{number = 1, name = main}
//异步队列--同步请求
//并没有开启新的线程--还是在主线程上面串行的执行
-(void)test2{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_sync(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 1><NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 2><NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 3><NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 4><NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 5><NSThread: 0x7fed50d07b50>{number = 1, name = main}
//串行队列--同步请求
//并没有开启新的线程--还是在主线程上面串行的执行
-(void)test3{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL);
dispatch_sync(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7faa8a606430>{number = 1, name = main}
// 1><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
// 2><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
// 3><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
// 4><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
// 5><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
//串行队列--异步请求
//开启了一条新的线程--按照顺序执行
-(void)test4{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 1><NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 2><NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 3><NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 4><NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 5><NSThread: 0x7fe849c048f0>{number = 1, name = main}
//主线程--异步请求
//不会开启新的线程,都是在主线程上面执行的
-(void)test5{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_async(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fe881501cc0>{number = 1, name = main}
//主线程--同步请求
//卡主线程
-(void)test6{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fc70a7023c0>{number = 1, name = main}
// 2><NSThread: 0x7fc70a443ac0>{number = 2, name = (null)}
// 3><NSThread: 0x7fc70a61a740>{number = 4, name = (null)}
// 1><NSThread: 0x7fc70a70ea60>{number = 3, name = (null)}
// done //开启多条线程
//统一完成后 -(void)test7{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
}); dispatch_group_async(group, queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
}); dispatch_group_async(group, queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
}); dispatch_group_notify(group, queue, ^{
NSLog(@"done");
});
}

最新文章

  1. win系统登录密码重置
  2. php远程连接http方式
  3. VS2010 + Entity FrameWork 4.4 +Mvc 4.0 出现的错误
  4. Rotate bitmap by real angle
  5. VPN client on linux debian
  6. [置顶] 在Ubuntu下实现一个简单的Web服务器
  7. 1352 - Colored Cubes (枚举方法)
  8. keeplived日志位置指定
  9. 删除Oracle用户及表空间
  10. 实验八 &lt;FBG&gt; 基于原型的团队项目需求调研与分析
  11. MySQL中的主键,外键有什么作用详解
  12. python 自定义异常
  13. python-web微信实现
  14. mysql 按出现次数排序
  15. java泛型讲解
  16. IIS 7.5 上传文件大小限制
  17. PageUtil 分页
  18. 数据结构与算法JavaScript描述——栈
  19. 在c#中使用sqlite3
  20. Android getLocationInWindow

热门文章

  1. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.1——推荐配置
  2. 在本地模拟搭建zookeeper集群环境实例
  3. 《从零开始学Swift》学习笔记(Day 61)——Core Foundation框架之内存管理
  4. 选项卡jQuery(ele).each()
  5. 在DO搭建自己的ss
  6. Powershell Get-ChildItem 筛选文件,文件处理
  7. GO语言中使用OpenCV
  8. elastic search 查询语句
  9. pycharm中选择python interpreter
  10. 在容器最前面添加DOM元素 parent.insertBefore(new, parent.children[0])