//联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄
一、NSThread
NSThread 是 OS X 和 iOS 都提供的一个线程对象,它是线程的一个轻量级实现。在执行一些轻量级的简单任务时,NSThread 很有用,但用户仍然需要自己管理线程生命周期,进行线程间同步。比如,线程状态,依赖性,线程间同步等线程相关的主题 NSThread 都没有涉及。比如,涉及到线程间同步仍然需要配合使用 NSLock,NSCondition 或者 @synchronized。所以,遇到复杂任务时,轻量级的 NSThread 可能并不合适。
提供一个模拟多线程运作的简单例子:两个人同时一起到烤箱抢面包。我们启动两个线程,来代表两个人。由于烤箱门比较小,同时只能有一个人去拿面包。由于 NSThread 不处理线程同步,所以为了模拟这个过程, 你还需要一把线程锁(即类型为 NSLock 的实例变量 _lock)。在后面的 run 方法中会用到这把线程锁:
_lock = [[NSLock alloc] init];
NSThread *geroge = [[NSThread alloc] itWithTarget:self selector:
@selector(run) object:nil];
[geroge setName:@"Geroge"];
[geroge start];
NSThread *totty = [[NSThread alloc] nitWithTarget:self selector:
@selector(run) object:nil];
[totty setName:@"Totty"];
[totty start];
二、代码实现
受到线程锁保护的拿面包过程可以用下面的 run 方法表示:
- (void)run {
while (TRUE) {
[_lock lock];
if(_cake > 0){
[NSThread sleepForTimeInterval:0.5];
_cake--;
_occupied = kSum - _cake;
NSLog(@"Taken by %@\nCurrent free:%ld, occupied:
%ld", [[NSThread currentThread] name], _cake, _occupied);
}
[_lock unlock];
}
}
网友评论