前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GCD 队列串行 并行 同步 异步 小例

GCD 队列串行 并行 同步 异步 小例

作者头像
星宇大前端
发布2019-01-15 14:39:57
9040
发布2019-01-15 14:39:57
举报
文章被收录于专栏:大宇笔记

发现GCD Swift版有所更改,以后小例都用swift写,练习熟悉。

坚持,每天收获一点。

//

//  ViewController.swift

//  GCD_demo

//

//  Created by apple on 2017/5/31.

//  Copyright © 2017年 ZY. All rights reserved.

//

import UIKit

class ViewController: UIViewController {

overridefunc viewDidLoad() {

super.viewDidLoad()

// Do any additional setup after loading the view, typically from a nib.

concurrentQueue()

    }

overridefunc didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

    }

//串行队列

//串行同步和异步的区别主要是:同步会阻塞线程,异步线程继续运行,耗时任务将被搁置执行

func  serialQueueDemo(){

let serialQueue  =DispatchQueue(label:"zy")//默认是串行队列

#if ture

for indexin 1..<10 {

            serialQueue.async {//不管异步还是同步都只是开辟一个线程。

                Thread.current.name? = "异步线程名字\(index)"

if index==3 || index==7 {

                    Thread.sleep(forTimeInterval: 5);//

                }

                print(serialQueue.label,index,Thread.current);

            }

            print("线程阻塞了吗")

        }

#else

for indexin 1..<10 {

            serialQueue.sync {//不管异步还是同步都只是开辟一个线程。

Thread.current.name? ="同步线程名字\(index)"

if index==3|| index==7 {

Thread.sleep(forTimeInterval:5);

                }

print(serialQueue.label,index,Thread.current);

            }

print("线程阻塞了吗")

        }

#endif

    }

//并发队列

func  concurrentQueue(){

let  concurrentQueyue =DispatchQueue(label: "zy.concurrent",  attributes: DispatchQueue.Attributes.concurrent)

for indexin 1..<10 {

                concurrentQueyue.async {//异步会动态开辟线程,耗时任务也会被异步执行,线程不会阻塞。

Thread.current.name? ="异步线程名字\(index)"

if index==3|| index==7 {

Thread.sleep(forTimeInterval:5);//

                    }

print(concurrentQueyue.label,index,Thread.current);

                }

print("线程阻塞了吗")

            }

for indexin 1..<10 {

                concurrentQueyue.sync {//同步都只是开辟一个线程。会阻塞线程

Thread.current.name? ="同步线程名字\(index)"

if index==3|| index==7 {

Thread.sleep(forTimeInterval:5);

                    }

print(concurrentQueyue.label,index,Thread.current);

                }

print("线程阻塞了吗")

            }

    }

}

小例参考:

https://github.com/RainManGO/GCD_studyDemo.git

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年05月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档