AppDelegate.h
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
{
NSOperationQueue *processingQueue;
}
@property (weak) IBOutlet NSTextField *titleLabel;
- (IBAction)start:(id)sender;
@end
AppDelegate.m
#import "AppDelegate.h"
NSString * num = @"0";
@interface AppDelegate ()
@property (weak) IBOutlet NSWindow *window;
@end
@implementation AppDelegate
@synthesize titleLabel;
- (instancetype)init
{
self = [super init];
if (self) {
processingQueue = [[NSOperationQueue alloc]init];
[processingQueue setMaxConcurrentOperationCount:4];
}
return self;
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
// Insert code here to tear down your application
}
- (IBAction)start:(id)sender {
//线程1
[processingQueue addOperationWithBlock:^{
NSLog(@"线程1%@",[NSThread currentThread]);
@synchronized(num){
num =@"1";
}
NSLog(@"===============%@",num);
//线程2
[processingQueue addOperationWithBlock:^{
NSLog(@"线程2%@",[NSThread currentThread]);
@synchronized(num){
num =@"2";
}
NSLog(@"===============%@",num);
}];
}];
//线程3
[processingQueue addOperationWithBlock:^{
NSLog(@"线程3%@",[NSThread currentThread]);
@synchronized(num){
num =@"3";
}
NSLog(@"===============%@",num);
}];
//线程4
[processingQueue addOperationWithBlock:^{
NSLog(@"线程4%@",[NSThread currentThread]);
@synchronized(num){
num =@"4";
}
NSLog(@"===============%@",num);
}];
//线程5
[processingQueue addOperationWithBlock:^{
NSLog(@"线程5%@",[NSThread currentThread]);
@synchronized(num){
num =@"5";
}
NSLog(@"===============%@",num);
}];
//主线程
[[NSOperationQueue mainQueue]addOperationWithBlock:^{
NSLog(@"主线程%@",[NSThread currentThread]);
@synchronized(num){
num =@"10000";
}
NSLog(@"===============%@",num);
}];
// NSLog(@"前台处理%@",[NSThread currentThread]);
// [self performSelectorInBackground:@selector(backgroundOperation) withObject:nil];
}
-(void)backgroundOperation{
// @autoreleasepool{
// NSLog(@"后台处理%@",[NSThread currentThread]);
// [self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO];
// }
}
-(void)updateUI{
NSLog(@"updateUI%@",[NSThread currentThread]);
[titleLabel setStringValue:@"后台处理"];
}
@end