執行緒間的通訊

2021-07-15 21:45:18 字數 3530 閱讀 8765

執行緒間的通訊

簡單說明

執行緒間通訊:在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 ...