建立和啟動線程
- 一個NSThread對象就代表一條線程
- 建立、啟動線程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];
// 線程一啟動,就會線上程thread中執行self的run方法
- 主線程相關用法
+ (NSThread *)mainThread; // 獲得主線程
- (BOOL)isMainThread; // 是否為主線程
+ (BOOL)isMainThread; // 是否為主線程
其他用法
- 獲得目前線程
NSThread *current = [NSThread currentThread];
- 線程的排程優先級
+ (double)threadPriority;
+ (BOOL)setThreadPriority:(double)p;
- (double)threadPriority;
- (BOOL)setThreadPriority:(double)p;
//排程優先級的取值範圍是0.0 ~ 1.0,預設0.5,值越大,優先級越高
- 線程的名字
- (void)setName:(NSString *)n;
- (NSString *)name;
其他建立線程方式
- 建立線程後自動啟動線程
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
- 隐式建立并啟動線程
[self performSelectorInBackground:@selector(run) withObject:nil];
- 上述2種建立線程方式的優缺點
- 優點:簡單快捷
- 缺點:無法對線程進行更詳細的設定
線程的狀态
控制線程狀态
- 啟動線程
- (void)start;
// 進入就緒狀态 -> 運作狀态。當線程任務執行完畢,自動進入死亡狀态
- 阻塞(暫停)線程
+ (void)sleepUntilDate:(NSDate *)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
// 進入阻塞狀态
- 強制停止線程
+ (void)exit;
// 進入死亡狀态
注意:一旦線程停止(死亡)了,就不能再次開啟任務
多線程的安全隐患
- 資源共享
- 1塊資源可能會被多個線程共享,也就是多個線程可能會通路同一塊資源
- 比如多個線程通路同一個對象、同一個變量、同一個檔案
- 當多個線程通路同一塊資源時,很容易引發資料錯亂和資料安全問題