[Xcode10 實際操作]八、網路與多執行緒-(23)多執行緒的同步與非同步的區別
阿新 • • 發佈:2018-12-06
本文將演示執行緒的同步與非同步的區別。
在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】
非同步執行緒的執行,是沒有按照順序執行的。
1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib.8 9 //建立一個非同步執行緒,非同步執行緒的執行,是沒有按照順序執行的。 10 DispatchQueue.global(qos:.default).async 11 { 12 //新增一個執行4次的迴圈語句 13 for i in 0 ..< 4 14 { 15 //在控制檯列印輸出日誌資訊, 16 print("Talking something:\(i)") 17 //並使執行緒休眠1秒鐘,以方便觀察執行緒的執行 18 sleep(1) 19 } 20 } 21 22 //繼續建立一個非同步執行緒, 23 DispatchQueue.global(qos:.default).async 24 { 25 //新增一個執行4次的迴圈語句 26 for i in 0 ..< 4 27 { 28 //在控制檯列印輸出不同的日誌資訊,29 print("Watching TV:\(i)") 30 //並使執行緒休眠1秒鐘,以方便觀察執行緒的執行 31 sleep(1) 32 } 33 } 34 } 35 36 override func didReceiveMemoryWarning() { 37 super.didReceiveMemoryWarning() 38 // Dispose of any resources that can be recreated. 39 } 40 }
將非同步執行緒方法(async),更改為同步執行緒方法(sync)。
同步執行緒的執行,是按照順序依次執行的。
1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 9 //建立一個同步執行緒,同步執行緒的執行,是按照順序依次執行的。 10 DispatchQueue.global(qos:.default).sync 11 { 12 //新增一個執行4次的迴圈語句 13 for i in 0 ..< 4 14 { 15 //在控制檯列印輸出日誌資訊, 16 print("Talking something:\(i)") 17 //並使執行緒休眠1秒鐘,以方便觀察執行緒的執行 18 sleep(1) 19 } 20 } 21 22 //繼續建立一個同步執行緒, 23 DispatchQueue.global(qos:.default).sync 24 { 25 //新增一個執行4次的迴圈語句 26 for i in 0 ..< 4 27 { 28 //在控制檯列印輸出不同的日誌資訊, 29 print("Watching TV:\(i)") 30 //並使執行緒休眠1秒鐘,以方便觀察執行緒的執行 31 sleep(1) 32 } 33 } 34 } 35 36 override func didReceiveMemoryWarning() { 37 super.didReceiveMemoryWarning() 38 // Dispose of any resources that can be recreated. 39 } 40 }