@interface HMViewController ()
/** 剩余票数 */
@property (nonatomic, assign) int leftTicketsCount;
@property (nonatomic, strong) NSThread *thread0;
@property (nonatomic, strong) NSThread *thread1;
@property (nonatomic, strong) NSThread *thread2;
@end
@implementation HMViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// 默认有100张
self.leftTicketsCount = 100;
// 开启多条线程同时卖票
self.thread0 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];
self.thread0.name = @"售票员 A";
// self.thread0.threadPriority = 0.0;
self.thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];
self.thread1.name = @"售票员 B";
// self.thread1.threadPriority = 1.0;
self.thread2 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];
self.thread2.name = @"售票员 C";
// self.thread2.threadPriority = 0.0;
}
/**
* 卖票
*/
- (void)saleTicket
{
while (1) {
@synchronized(self) { // 加锁(只能用一把锁)
// 1.先检查票数
int count = self.leftTicketsCount;
if (count > 0) {
// 暂停
// [NSThread sleepForTimeInterval:0.0002];
// 2.票数 - 1
self.leftTicketsCount = count - 1;
NSThread *current = [NSThread currentThread];
NSLog(@"%@ 卖了一张票, 剩余%d张票", current.name, self.leftTicketsCount);
} else {
// 退出线程
[NSThread exit];
}
} // 解锁
}
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.thread0 start];
[self.thread1 start];
[self.thread2 start];
}