執行緒間的通訊
簡單說明
執行緒間通訊:在1個程序中,執行緒往往不是孤立存在的,多個執行緒之間需要經常進行通訊
執行緒間通訊的體現
1個執行緒傳遞資料給另1個執行緒
在1個執行緒中執行完特定任務後,轉到另1個執行緒繼續執行任務
執行緒間通訊常用方法
// 06-nsthread04-執行緒間通訊
////
#import "yyviewcontroller.h"
@inte***ce yyviewcontroller ()
@property (weak, nonatomic) iboutlet uiimageview *iconview;
@end
@implementation yyviewcontroller
- (void)viewdidload
-(void)touchesbegan:(nsset *)touches withevent:(uievent *)event
//設定顯示
-(void)settingimage:(uiimage *)image
@end
**2:
//
// yyviewcontroller.m
// 06-nsthread04-執行緒間通訊
////
#import "yyviewcontroller.h"
#import
@inte***ce yyviewcontroller ()
@property (weak, nonatomic) iboutlet uiimageview *iconview;
@end
@implementation yyviewcontroller
- (void)viewdidload
[self performselectorinbackground:@selector(download) withobject:nil];
}-(void)download
//設定顯示
//-(void)settingimage:(uiimage *)image
//@end
執行緒安全
一、多執行緒的安全隱患
資源共享
1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源
比如多個執行緒訪問同乙個物件、同乙個變數、同乙個檔案
當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題
示例一:
示例二:
問題**:
//
// yyviewcontroller.m
// 05-執行緒安全
////
#import "yyviewcontroller.h"
@inte***ce yyviewcontroller ()
//剩餘票數
@property(nonatomic,assign) int leftticketscount;
@property(nonatomic,strong)nsthread *thread1;
@property(nonatomic,strong)nsthread *thread2;
@property(nonatomic,strong)nsthread *thread3;
@end
@implementation yyviewcontroller
- (void)viewdidload
-(void)selltickets
else}}
-(void)touchesbegan:(nsset *)touches withevent:(uievent *)event
注意:鎖定1份**只用1把鎖,用多把鎖是無效的
**示例:
//// yyviewcontroller.m
// 05-執行緒安全
////
#import "yyviewcontroller.h"
@inte***ce yyviewcontroller ()
//剩餘票數
@property(nonatomic,assign) int leftticketscount;
@property(nonatomic,strong)nsthread *thread1;
@property(nonatomic,strong)nsthread *thread2;
@property(nonatomic,strong)nsthread *thread3;
@end
@implementation yyviewcontroller
- (void)viewdidload
-(void)selltickets
else}}
}-(void)touchesbegan:(nsset *)touches withevent:(uievent *)event
@end
執行效果圖
互斥鎖的優缺點
優點:能有效防止因多執行緒搶奪資源造成的資料安全問題
缺點:需要消耗大量的cpu資源
互斥鎖的使用前提:多條執行緒搶奪同一塊資源
相關專業術語:執行緒同步,多條執行緒按順序地執行任務
互斥鎖,就是使用了執行緒同步技術
四:原子和非原子屬性
oc在定義屬性時有nonatomic和atomic兩種選擇
atomic:原子屬性,為setter方法加鎖(預設就是atomic)
nonatomic:非原子屬性,不會為setter方法加鎖
atomic加鎖原理
@property (assign, atomic) int age;
- (void)setage:(int)age}
原子和非原子屬性的選擇
nonatomic和atomic對比
ios開發的建議
執行緒間的通訊
1.執行緒間的通訊 多個執行緒處理同乙個資源,但處理的動作卻不同 2.執行緒間的有效通訊 使用等待喚醒機制,實現協調通訊,讓執行緒間進行有規律的執行 3.條件 3.1 wait方法與notify方法必須由同乙個鎖物件呼叫,因為,對應的鎖物件可以通過notify喚醒使用同乙個物件呼叫的wait方法後的...
執行緒間的通訊
常用的 wait notify notifyall 在乙個執行緒裡面,喚醒其他擁有同樣的鎖的執行緒 使用wait notify notifyall 時,塊必須上鎖 author fzz public class communicate catch interruptedexception e sys...
執行緒間的通訊
public class demo1 catch interruptedexception e system.out.println flag is true start new thread catch interruptedexception e system.out.println flag ...