iOS 多執行緒 NSThread

2021-07-11 14:22:45 字數 2299 閱讀 7268

nsthread *thread = [[nsthread alloc] initwithtarget:self selector:@selector(run) object:nil];

[thread start];

+(nsthread *)mainthread; //獲得主線程

-(bool)ismainthread; //是否為主執行緒

+(bool)ismainthread; //是否為主執行緒

//進入就緒狀態 -> 執行狀態。當執行緒任務執行完畢,自動進入死亡狀態

+(void)sleepuntildate:(nsdate *)date;

+(void)sleepfortimeinterval:(nstimeinterval)ti;

//進入阻塞狀態

+(void)exit;

//進入死亡狀態

注意:一旦執行緒停止(死亡)了,就不能再次開啟任務。

資源共享

當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題

比如售票問題,同一張票在某個時間只能賣給乙個人,不能把一張票賣給多個人,這樣就會出問題。

安全隱患解決 - 互斥鎖

1.互斥鎖使用格式

@synchronized(鎖物件)
注意:鎖定 1 份**只用 1 把鎖,用多把鎖是無效的

2.互斥鎖的優缺點

3.互斥鎖的使用前提:多條執行緒搶奪同一塊資源

1.oc 在定義屬性的時候有 nonatomic 和 atomic 兩種選擇:

2.原子和非原子屬性的選擇:

ios開發建議

* 所有屬性都宣告為 nonatomic

* 盡量避免多執行緒搶奪同一資源

* 盡量將加鎖,資源搶奪的業務邏輯交給伺服器端處理,減少移動客戶端的壓力

1.什麼叫做執行緒間通訊?

在乙個程序中,執行緒往往不是孤立存在的,多個執行緒之間需要經常進行通訊

2.執行緒間通訊的體現

* 1 個執行緒傳遞資料給另乙個執行緒

* 在 1 個執行緒中執行完特定任務後,轉到另 1 個執行緒繼續執行任務

3.執行緒間通訊常用方法

-(void)performselectoronmainthread:(sel)aselector withobject:(id)arg waituntildone:(bool)wait;

-(void)performselector:(sel)aselector onthread:(nsthread *)thr withobject:(id)arg waituntildone:(bool)wait;

iOS 多執行緒 NSThread

ibaction startthreadbuttonpressed uibutton sender 建立新的執行緒,執行緒的函式為 startthebackgroundjob.具體的 startthebackgroundjob 函式定義如下.void startthebackgroundjob 在第...

iOS 多執行緒 NSThread

nsthread thread nsthread alloc initwithtarget self selector selector run object nil thread start 複製 上述2種建立執行緒方式的優缺點 void sleepuntildate nsdate date vo...

iOS多執行緒之NSThread

ios多執行緒之nsthread 乙個nsthread物件就代表一條執行緒 1.建立,啟動執行緒 nsthread thread nsthread alloc initwithtarget self selector selector run object nil thread start 主線程相...