ios-FMDB多线程的使用技巧

来源:互联网 发布:淘宝页面怎么设计 编辑:程序博客网 时间:2024/06/02 05:31

先看一段代码

 dispatch_queue_t queue1=dispatch_queue_create("hh", DISPATCH_QUEUE_SERIAL); dispatch_queue_t queue=  dispatch_queue_create("hl", DISPATCH_QUEUE_CONCURRENT);    for(int i=0;i<10;i++)    {    dispatch_async(queue, ^{                    dispatch_sync(queue1, ^{                NSLog(@"hello %d %@",i,[NSThread currentThread]);                            });    });    }
执行效果如下图所示,也就是说开启了多个线程,任务都是顺序执行完成的,这里相当于就是,异步执行了这些任务,但是我们仍然可以保证这些任务被顺序的执行,这个主要是被用到在数据库操作中,因为如果耗时的操作我们要放到子线程上执行,如果放到主线程上执行,那就会造成界面的卡顿,所以数据库操作要保证同一个时间,只有一个操作。

在FMDB默认情况下都是在主线程上执行的。

还有一点,串行队列不能嵌套使用,就比如如下代码所示

这个就相当于先把从NSLog(@"hello")这句以及往下的语句放到串行队列中,然后下面又遇到dispatch_sync的时候,又添加了个任务到队列中,然后又是同步执行的,也就是说需要把第一个任务执行完,才能继续执行后面的任务,而后面的任务需要等把第一个任务执行完,再去执行,所以就相互等待了。

   dispatch_queue_t queue1=dispatch_queue_create("hh", DISPATCH_QUEUE_SERIAL);   dispatch_sync(queue1, ^{        NSLog(@"hello");        dispatch_sync(queue1, ^{            NSLog(@"kko");        });    });