- (void)test {
//并发队列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
for (int i = 0; i < 1000; i++) {
//超过数据线程总数,线程爆炸
dispatch_async(queue, ^{
self.name = [NSString stringWithFormat:@"abcdefghijk_%d",i];
});
}
NSLog(@"name : %@",self.name);
}
//输出结果:crash,async 的异步线程,需要不断开辟线程。iOS的最大线程总数不到100个,所以1000个的时候,导致线程爆炸
- (void)test1 {
NSLog(@"执行任务1");
dispatch_queue_t queue = dispatch_queue_create("myqueu", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{ // 0
NSLog(@"执行任务2");
//相当于主线程调用了dispatch_sync(main)
dispatch_sync(queue, ^{ // 1
NSLog(@"执行任务3");
});
NSLog(@"执行任务4");
});
NSLog(@"执行任务5");
}
//输出:152 然后死锁了
- (void)test2
{
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");
});
}
//输出:1 3 不会执行test方法,原因afterDelay需要加入runloop才可以启动
iOS 多线程面试题的输出类型考点
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 共17篇博文【白话经典算法系列之十七】 数组中只出现一次的数数组A中,除了某一个数字x之外,其他数字都出现了三次,...
- 题目:启动三个线程A,B,C,打印10次 按照ABC的顺序输出 1. OC 使用NSLock 输出: 2. OC ...
- object-c的数据类型有NSString, NSNumber, NSArray, NSMutableArray...
- iOS面试题 一共分为笔试题和面试题两部分笔试题 一共分为10个 总共613题面试题 一共400题笔试题 一个10...
- 基本概念 进程和线程的区别 进程是指系统中正在运行的一个应用程序, 每个进程之间是相互独立的 一个进程中可以有多条...