美文网首页
swift3 GCD DispatchGroup && barr

swift3 GCD DispatchGroup && barr

作者: yurnery | 来源:发表于2017-04-29 20:06 被阅读0次

Sample


import UIKit

final class ViewController: UIViewController {
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        //        dispatchBarrier()
        disPatchGroup()
    }
}


fileprivate extension ViewController{
    func disPatchGroup(){
        DispatchQueue.global().async {
            let queue = DispatchQueue.global()
            let group = DispatchGroup()
            
            let groupItem = DispatchWorkItem{
                print("takeTimeTask1 finished +++++++++++++++++++++")
            }
            
            let item1 = DispatchWorkItem {[weak self] in
                self?.takeTimeTask1()
            }
            
            let item2 = DispatchWorkItem {[weak self] in
                self?.takeTimeTask2()
            }
            
            queue.async(group: group, execute: item1)
            queue.async(group: group, execute: item1)
            queue.async(group: group, execute: item2)
            queue.async(group: group, execute: item2)
            
            //            guard group all tasks are finished, then perform this method
            group.notify(queue: queue, work: groupItem)
            
        }
    }
    
    func dispatchBarrier(){
        DispatchQueue.global().async {
            //barrier, the queue must user creat, global is fail
            let queue = DispatchQueue.init(label: "barrier", qos: .userInitiated, attributes: .concurrent)
            let barrierItem = DispatchWorkItem(qos: .userInitiated, flags: .barrier) {
                print("takeTimeTask1 finished +++++++++++++++++++++++")
            }
            let item1 = DispatchWorkItem {[weak self] in
                self?.takeTimeTask1()
            }
            
            let item2 = DispatchWorkItem {[weak self] in
                self?.takeTimeTask2()
            }
            
            queue.async(execute: item1)
            queue.async(execute: item1)
            queue.async(execute: item1)
            queue.async(execute: item1)
            
            queue.async(execute: barrierItem)
            
            queue.async(execute: item2)
            queue.async(execute: item2)
            queue.async(execute: item2)
            queue.async(execute: item2)
        }
        
    }
    
    private func takeTimeTask1(){
        sleep(2)
        print("takeTimeTask1-------", Thread.current)
    }
    
    private func takeTimeTask2(){
        sleep(2)
        print("takeTimeTask2-------", Thread.current)
    }
}

相关文章

  • swift3 GCD DispatchGroup && barr

    Sample

  • Swift3使用GCD和DispatchQueues关于gcd

    关于对gcd 的使用,有几个链接写的还是相当不错的。Swift3使用GCD和DispatchQueueshttp:...

  • Swift-GCD

    本篇文章介绍的是在Swift3语言下的GCD应用操作,针对的目标读者可以是没有GCD基础的初学者,也可以是对GCD...

  • Swift3 GCD

    Swift3 的gcd变化很大,这里列举一下,大家可以有个对照: 1、Create a serial queue ...

  • Swift3 & GCD

    前言 这是一篇仿写的博客,主要目的是熟悉Swift3+GCD.参考博客. 一次就好? 我们知道ARC普及后 Obj...

  • iOS开发-Swift3中GCD的使用

    GCD作为iOS开发中多线程实现的一种重要方式,在swift3针对GCD的使用做了一些改进,使其更加面向对象了,在...

  • DispatchSemaphore & DispatchGrou

    标记 DispatchSemaphore DispatchGroup

  • Swift3 GCD大全

    本文是对这篇文章中GCD的使用方法的语法翻译 另外推荐这篇 看完以上两篇,我保证你的GCD差不多都掌握了 Swif...

  • GCD & Swift3

    1、最常用的在一个异步队列中获取数据,然后返回主线程更新UI 2、优先级的改进 eg: 3、DispatchWor...

  • swift3 GCD学习

    这篇文章对自定义队列的串并行,优先级,定时器和workItem讲的更为详细,有兴趣的可以直接去看 GCD精讲(Sw...

网友评论

      本文标题:swift3 GCD DispatchGroup && barr

      本文链接:https://www.haomeiwen.com/subject/gafttxtx.html