swift 多线程GCD 高级方法 DispatchGroup
2023-09-27 14:27:38 时间
DispatchGroup
enter和leave 是要成对出现的
//: FROM https://www.anuomob.com
import UIKit
import PlaygroundSupport
//不希望主线程执行完毕就结束
PlaygroundPage.current.needsIndefiniteExecution = true
let workingGroup = DispatchGroup()
let workingQueue = DispatchQueue(label: "request_queue")
workingGroup.enter()
workingQueue.async {
Thread.sleep(forTimeInterval: 1)
print("接口A 数据请求完成")
workingGroup.leave()
}
workingGroup.enter()
workingQueue.async {
Thread.sleep(forTimeInterval: 1)
print("接口B 数据请求完成")
workingGroup.leave()
}
print("我是最开始执行的,异步操作里的打印后执行")
workingGroup.wait()
print("数据A,和数据B的数据请求都已经完毕!开始合并两个接口的数据")
我是最开始执行的,异步操作里的打印后执行
接口A 数据请求完成
接口B 数据请求完成
数据A,和数据B的数据请求都已经完毕!开始合并两个接口的数据
简单来说 dispatch source 是一个见识某类型的对象,当这些事件发生时,它自动将一个task放入一个dispatchqueue的执行例程中
Mach port send right state changes.
Mach port receive right state changes.
External process state change.
File descriptor ready for read.
" File descriptor ready for write.
. Filesystem node event.
POSIX signal.
Custom timer.
. Custom event.
下面写一个定时器
//: FROM https://www.anuomob.com
import UIKit
import PlaygroundSupport
//不希望主线程执行完毕就结束
PlaygroundPage.current.needsIndefiniteExecution = true
var seconds = 10
let timer:DispatchSourceTimer = DispatchSource.makeTimerSource(flags:[], queue: DispatchQueue.global())
timer.schedule(deadline: .now(),repeating: 1.0)
timer.setEventHandler{
seconds -= 1
if seconds < 0 {
timer.cancel()
} else {
print(seconds)
}
}
timer.resume()
9
8
7
6
5
4
3
2
1
0
相关文章
- 【多线程】LinkedTransferQueue
- C++多线程编程:同步之互斥量Mutex
- 【C/C++开发】C++11 并发指南一(C++11 多线程初探)
- java 多线程 yield方法的意义
- java使用nio多线程读取超过10G的文件处理方法
- java多线程之CyclicBarrier的使用方法
- Java中多线程启动,为什么调用的是start方法,而不是run方法?
- java中多线程的安全问题以及解决办法
- 多线程JUC 篇 2.1 创建多线程的步骤(synchronized和lock)
- Java 多线程(三)—— 线程的生命周期及方法
- 多线程 Thread.yield 方法到底有什么用?
- Java-多线程的实现与启动
- PHP+shell实现多线程的方法
- Java多线程-通过实现 Runnable 接口来创建线程
- Java多线程:向线程传递参数的三种方法
- Java精选笔记_多线程(创建、生命周期及状态转换、调度、同步、通信)
- java多线程对CountDownLatch的使用实例
- 2023-01-10 mysql列存储引擎-聚合多线程并行扫表-VCPackGuardian策略LOCK_ALL-概要设计
- 【操作系统】多线程之线程同步
- python的threading的使用(join方法,多线程,锁threading.Lock和threading.Condition
- java多线程基础(synchronize关键字)
- c#中多线程写DataGridView出现滚动栏导致程序卡死(无响应)的解决的方法
- 利用GDB进行多线程调试
- 如何提高多线程程序的cpu利用率
- LINUX多线程编程之创建,等待,取消线程
- 多线程交替打印ABC的多种实现方法
- 【多线程】println方法底层原理