多线程概念
来源:互联网 发布:新浪博客发网络繁忙 编辑:程序博客网 时间:2024/04/30 00:44
执行路径,线程,负责程序中代码的实际运行
一个进程,至少有一个线程(主线程)
新建一条执行路径
512K
不能杀掉一个线程!但是可以暂停、休眠
说明:每个应用程序由操作系统分配的短暂的时间片(Timeslice)轮流使用CPU,由于CPU对每个时间片的处理速度非常快,因此,用户看来好像这些任务在同时执行的
并发:指两个或多个任务在同一时间间隔内发生,但是,在任意一个时刻点上,CPU只会处理一个任务
串行队列
dispatch_queue_t q = dispatch_queue_create("cn.itcast.demoqueue",DISPATCH_QUEUE_SERIAL);
dispatch_sync(q, ^{
NSLog(@"串行同步 %@", [NSThread currentThread]);
});
dispatch_async(q, ^{
NSLog(@"串行异步 %@", [NSThread currentThread]);
});
并行队列
dispatch_queue_t q = dispatch_queue_create("cn.itcast.demoqueue",DISPATCH_QUEUE_CONCURRENT);
dispatch_sync(q, ^{
NSLog(@"并行同步 %@", [NSThread currentThread]);
});
dispatch_async(q, ^{
NSLog(@"并行异步 %@", [NSThread currentThread]);
});
全局队列dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(q, ^{
NSLog(@"全局异步 %@ %d", [NSThread currentThread], i);
});
dispatch_sync(q, ^{
NSLog(@"全局同步 %@ %d", [NSThread currentThread], i);
});
主队列
dispatch_queue_t q = dispatch_get_main_queue();
dispatch_async(q, ^{
NSLog(@"主队列异步 %@", [NSThread currentThread]);
});
dispatch_sync(q, ^{
NSLog(@"主队列同步%@", [NSThreadcurrentThread]);
});
不同队列中嵌套dispatch_sync的结果
// 全局队列,都在主线程上执行,不会死锁
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
// 并行队列,都在主线程上执行,不会死锁
dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo",DISPATCH_QUEUE_CONCURRENT);
// 串行队列,会死锁,但是会执行嵌套同步操作之前的代码
dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo",DISPATCH_QUEUE_SERIAL);
// 直接死锁
dispatch_queue_t q = dispatch_get_main_queue();
dispatch_sync(q,^{
NSLog(@"同步任务%@",[NSThreadcurrentThread]);
dispatch_sync(q,^{
NSLog(@"同步任务%@",[NSThreadcurrentThread]);
});
});
NSOperation &NSOperationQueueself.myQueue = [[NSOperationQueue alloc] init];
-(void)operationAction:(id)obj
{
NSLog(@"%@ - obj : %@", [NSThread currentThread], obj);
}
NSInvocationOperation *op = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(operationAction:) object:@(i)];
[self.myQueue addOperation:op];
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
[self operationAction:@"Block Operation"];
}];
[self.myQueue addOperation:op];
NSObject的多线程方法
- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
[NSThread currentThread]
[NSThread sleepForTimeInterval:2.0f];
- 多线程概念
- 多线程概念
- 多线程 概念
- 多线程概念
- 多线程概念
- 多线程概念
- 多线程概念
- 多线程 概念
- 多线程概念
- 多线程概念
- 多线程概念
- 多线程概念
- 进程,线程,多线程概念
- 多线程简单概念
- 多线程的概念
- 多线程的概念
- Java多线程概念
- 多线程的概念
- 涂子沛《大数据》读书笔记
- shiro原理
- 欢迎使用CSDN-markdown编辑器
- 日拱一卒(五十三)
- MFC中设置背景色,背景图片和背景音乐的方法【学习笔记1】
- 多线程概念
- DLL文件编译出错_DllMain@12 already defined in XXX.obj
- 当黑客马拉松遇上全栈工程师
- 微信公众平台PHP开发
- Json数据解析----------Gson用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库
- 【Rayeager PX2】Rayeager PX2开发板上安装FreeBSD
- 拿到期权,就能一飞冲天?
- IIS重写为HTML后,真正的HTML解析出错的解决办法
- Java 动态代理