iOS併發機制(三) —— NSOperation實現多併發之建立佇列和開啟執行緒
版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.08.16 |
前言
訊號量機制是多執行緒通訊中的比較重要的一部分,對於
NSOperation
可以設定併發數,但是對於GCD
就不能設定併發數了,那麼就只能靠訊號量機制了。接下來這幾篇就會詳細的說一下併發機制。感興趣的可以看這幾篇文章。
1. ios併發機制(一) —— GCD中的訊號量及幾個重要函式
2.ios併發機制(二) —— NSOperation實現多併發之建立任務
佇列的建立
上一篇主要講了NSOperation API
介面以及建立任務的方法,下面就說一下佇列的建立方法。NSOperationQueue
可以分為兩種佇列,主佇列和其他佇列,其他佇列裡面還可以實現序列和併發功能。
- 主佇列:新增到主佇列中的任務都會放在主執行緒中執行。
NSOperationQueue *queue = [NSOperationQueue mainQueue];
- 其他佇列:新增到其他佇列中的任務都會放在子執行緒中執行。
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
新增任務到佇列
下面我們就看一下新增任務到佇列。
方法1
可以使用方法- (void)addOperation:(NSOperation *)op;
下面還是看程式碼。
#import "JJOperationQueueVC.h"
@interface JJOperationQueueVC ()
@end
@implementation JJOperationQueueVC
#pragma mark - Override Base Function
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
//建立佇列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//建立任務,你也可以使用NSInvocationOperation,我這裡就只用NSBlockOperation做個例子了
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"blockOperation");
NSLog(@"thread = %@",[NSThread currentThread]);
}];
[queue addOperation:blockOperation];
}
@end
看輸出結果
2017-08-16 17:36:13.590386+0800 JJOC[10142:4509963] blockOperation
2017-08-16 17:36:13.590538+0800 JJOC[10142:4509963] thread = <NSThread: 0x17407ff40>{number = 4, name = (null)}
可以發現開啟了新的執行緒,同時將任務放在佇列裡面,任務就會立即執行,不同呼叫其他方法才開始執行。
方法2
使用- (void)addOperationWithBlock:(void (^)(void))block NS_AVAILABLE(10_6, 4_0);
還是直接看程式碼。
#import "JJOperationQueueVC.h"
@interface JJOperationQueueVC ()
@end
@implementation JJOperationQueueVC
#pragma mark - Override Base Function
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
//建立佇列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock:^{
NSLog(@"blockOperation");
NSLog(@"thread = %@",[NSThread currentThread]);
}];
}
@end
下面看輸出結果
2017-08-16 17:38:32.428260+0800 JJOC[10146:4510462] blockOperation
2017-08-16 17:38:32.428661+0800 JJOC[10146:4510462] thread = <NSThread: 0x170075a00>{number = 4, name = (null)}
可見也開啟了一個新的執行緒。
後記
未完,待續~~~
相關文章
- iOS 多執行緒--GCD 序列佇列、併發佇列以及同步執行、非同步執行iOS執行緒GC佇列非同步
- shell佇列實現執行緒併發控制(轉)佇列執行緒
- 用多執行緒,實現併發,TCP執行緒TCP
- 【Java基礎】執行緒和併發機制Java執行緒
- iOS多執行緒之併發程式設計-4iOS執行緒程式設計
- Java 併發和多執行緒(一) Java併發性和多執行緒介紹[轉]Java執行緒
- mysql併發執行緒控制之thread pool和優先佇列MySql執行緒thread佇列
- Java併發和多執行緒2:3種方式實現陣列求和Java執行緒陣列
- iOS 多執行緒之NSOperationiOS執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- Java併發和多執行緒:序Java執行緒
- Java併發和多執行緒1:併發框架基本示例Java執行緒框架
- JAVA多執行緒併發Java執行緒
- java多執行緒與併發 - 併發工具類Java執行緒
- JAVA多執行緒和併發基礎Java執行緒
- 多執行緒併發篇——三件兵器執行緒
- Java高併發與多執行緒(二)-----執行緒的實現方式Java執行緒
- java 多執行緒 併發 面試Java執行緒面試
- Java併發和多執行緒4:使用通用同步工具CountDownLatch實現執行緒等待Java執行緒CountDownLatch
- Java多執行緒與併發之ThreadLocalJava執行緒thread
- Java學習之併發多執行緒理解Java執行緒
- 多執行緒併發篇——如何停止執行緒執行緒
- Java多執行緒和併發問題集Java執行緒
- 深度理解GCD執行緒死鎖,佇列,同步和非同步,序列和併發GC執行緒佇列非同步
- Java併發(三)----建立執行緒的三種方式及檢視程式執行緒Java執行緒
- 併發與多執行緒基礎執行緒
- MySQL多執行緒併發調優MySql執行緒
- 多執行緒與併發----Semaphere同步執行緒
- 多執行緒與高併發(二)執行緒安全執行緒
- 併發程式設計 建立執行緒的三種方式程式設計執行緒
- JUC之Exchanger-多執行緒與高併發執行緒
- Python併發程式設計之談談執行緒中的“鎖機制”(三)Python程式設計執行緒
- Java高併發與多執行緒(三)-----執行緒的基本屬性和主要方法Java執行緒
- 多執行緒與高併發(一)多執行緒入門執行緒
- 【多執行緒高併發程式設計】二 實現多執行緒的幾種方式執行緒程式設計
- Java併發指南1:併發基礎與Java多執行緒Java執行緒
- Go高效併發 10 | Context:多執行緒併發控制神器GoContext執行緒
- Java併發程式設計之執行緒篇之執行緒中斷(三)Java程式設計執行緒