多线程

1.串行

let serial = DispatchQueue(label: "serialQueue")
        serial.async {
            
        }

2.并行

let comQueue = DispatchQueue(label: "comQueue", attributes: DispatchQueue.Attributes.concurrent)
        comQueue.async {
            
        }

3.系统的线程

let queue = DispatchQueue.global(qos: .default)
        queue.async {
            
        }
        
        //主线
        DispatchQueue.main.async {
            
        }

4.延时1秒执行

let time: TimeInterval = 1.0
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + time) {
            //code
            print("1 秒后输出")
        }

5.group,用于多任务请求,最后刷新UI,注意:不是顺序执行的

private func test2() {
        
        let queue = DispatchQueue.global(qos: .default)
        let group = DispatchGroup()
        
        group.enter()
        queue.async(group: group, execute: {
            
            //网络请求
            //注意:不过成功还是失败,读需要调用
            group.leave()
        })
        
        group.enter()
        queue.async(group: group, execute: {
            
            //网络请求
            //注意:不过成功还是失败,读需要调用
            group.leave()
        })
        
        group.enter()
        queue.async(group: group, execute: {
            
            //网络请求
            //注意:不过成功还是失败,读需要调用
            group.leave()
        })
        
        //最后结束的地方
        group.notify(queue: DispatchQueue.main, execute: {
            //刷新UI
        })
    }

6.信号,顺序执行

private func test3() {
        
        //获取系统存在的全局队列
        let queue = DispatchQueue.global(qos: .default)
        //创建信号
        let sem = DispatchSemaphore(value: 0)
        
        //请求1
        queue.async {
            //网络请求
            //注意:不过成功还是失败,读需要调用
            sem.signal()
        }
        sem.wait()
        
        //请求2
        queue.async {
            //网络请求
            //注意:不过成功还是失败,读需要调用
            sem.signal()
        }
        sem.wait()
        
        //请求3
        queue.async {
            //网络请求
            //注意:不过成功还是失败,读需要调用
            sem.signal()
        }
        sem.wait()
        
        //最后结束的地方
        DispatchQueue.main.async {
            //刷新UI
        }
    }

 

posted @ 2017-03-28 14:29  ZJea  阅读(148)  评论(0编辑  收藏  举报