NSThread

/*

线程:一条独立执行的代码路径

进程:一个可执行的程序可以有多条线程同时执行

多线程:一个可执行程序(进程)同时拥有多条独立执行的代码路径(线程)

线程:

1.主线程:刷新UI响应用户的触摸事件

2.分线程:处理耗时任务操作---下载大量运算

*/

//有个NSThread对象,就是一个线程

//1.创建一个线程-----需要手动开启

//    NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(<#selector#>) object:nil];

//2.默认开启

//    [NSThread detachNewThreadSelector:@selector(<#selector#>) toTarget:self withObject:nil];

//3.默认开启

//    [self performSelectorInBackground:@selector(<#selector#>) withObject:nil];

//2.3优缺点

//优点:简单快捷缺点:无法给线程设置属性

// waitUntilDone BOOL类型YES表示等待当前方法执行完才返回主线程. NO表示执行到这句时就返回到主线程

//        [self performSelectorOnMainThread:@selector(numberOut) withObject:nil waitUntilDone:NO];

//    //1.创建一个队列

//    _queue = [[NSOperationQueue alloc]init];

//    //2.添加操作

//    NSInvocationOperation * operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(sellTickets) object:nil];

//    NSBlockOperation * blockOperation = [NSBlockOperation blockOperationWithBlock:^{

//        [self sellTickets];

//    }];

//    [_queue addOperation:operation];

@property(nonatomic,strong)NSLock* lock;

@property(nonatomic,strong)NSCondition* condition;

//创建锁

self.lock= [[NSLockalloc]init];

self.condition= [[NSConditionalloc]init];

//当多条线程同时访问一个数据(一段代码)的时候会引起数据错乱30

//解决方法:线程同步

//线程同步:当多条线程同时访问一个数据(一段代码)的时候,让其顺序访问

//实现线程同步有三种方式

//互斥锁10

//1.  @synchronized(self){内容代码}

//2.{[self.lock lock];内容代码;[self.lock unlock];}

//3.{[self.condition lock];内容代码;[self.condition unlock];}

//并发:一起发生

//串行:按顺序的一个一个发生

while(1) {

//1. @synchronized(self) {

//2. [self.lock lock];

//3.[self.conditionlock];

intcount =_leftTickets;

if(count > 0) {

//让当前线程1秒

//sleep(1);

[NSThreadsleepForTimeInterval:1];

_leftTickets= count - 1;

NSLog(@"%@买了一张票%d  %@",[NSThreadcurrentThread].name,_leftTickets,[NSThreadcurrentThread]);

}else{

//线程退出

///[NSThread exit];

//取消所有操作

[_queuecancelAllOperations];

break;

}

//[self.conditionunlock];

//[self.lock unlock];

你可能感兴趣的:(NSThread)