1. 程式人生 > >[Xcode10 實際操作]八、網路與多執行緒-(23)多執行緒的同步與非同步的區別

[Xcode10 實際操作]八、網路與多執行緒-(23)多執行緒的同步與非同步的區別

本文將演示執行緒的同步與非同步的區別。

在專案導航區,開啟檢視控制器的程式碼檔案【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 }