Swift GCD

  var queue: dispatch_queue_t = dispatch_get_main_queue()// 主线程

        queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)// 后台执行

        

        // 异步执行队列任务

        dispatch_async(queue, { () -> Void in

            print("开新线程执行")

        })

        

        

        // 延时执行

        var delta:Int64 = Int64(2 * NSEC_PER_SEC)// 2s后执行,可能不仅限于2s

        delta = Int64(100 * NSEC_PER_MSEC)//100毫秒后执行

        // NSEC_PER_MSEC

        let when: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, delta)

        dispatch_after(when, queue) { () -> Void in

            print("dispatch_after")

        }

        

        

        // 只执行一次

        struct Static {

            static var onceToken: dispatch_once_t = 0

            static var value: String!

        }

        dispatch_once(&Static.onceToken, { () -> Void in

            Static.value = "单例模式"

        })

        print("\(Static.value)")

        dispatch_once(&Static.onceToken, { () -> Void in

            Static.value = "改变值"

        })

        print("\(Static.value)")

        

        

        // 分组执行

        let group = dispatch_group_create()

        queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)// 默认优先级执行

        for (var i = 0; i<10; i++) {

            //异步执行队列任务

            dispatch_group_async(group, queue, { () -> Void in

                Static.value = Static.value + "1"

                print("\(Static.value)")

            })

        }

        // 分组队列执行完毕后执行

        dispatch_group_notify(group, queue) { () -> Void in

            print("dispatch_group_notify")

        }

        

        

        // 串行队列:只有一个线程,加入到队列中的操作按添加顺序依次执行。

        let serialQueue = dispatch_queue_create("yangj", DISPATCH_QUEUE_SERIAL)

        for (var i = 0; i<10; i++) {

            //异步执行队列任务

            dispatch_async(serialQueue, { () -> Void in

                //Static.value = Static.value + "1"

                //println("\(Static.value)")

            })

        }

        

        

        // 并发队列:有多个线程,操作进来之后它会将这些队列安排在可用的处理器上,同时保证先进来的任务优先处理。

        let globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

        for (var i = 0; i<10; i++) {

            //异步执行队列任务

            dispatch_async(globalQueue, { () -> Void in

                //Static.value = Static.value + "1"

                //println("\(Static.value)")

            })

        }

        

    }

转载于:https://www.cnblogs.com/ZGSmile/p/5694241.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值