问题描述
- iOS中 @synchronized(对象) 中"对象"是什么的问题
-
@synchronized(对象)中的这个"对象"是什么,锁定它是为了什么
在 sellTicket 中锁定了 self , 如果在 ticket 中没有用@synchronized(self),就会在sellTicket中线程运行的情况下,运行ticket中的线程,
如果用了@synchronized(self) 所有线程就会一个一个运行//============== 代码部分 =================
@property (nonatomic, assign) NSInteger ticket;- (void)viewDidLoad {
[super viewDidLoad];_ticket = 50;
[NSThread detachNewThreadSelector:@selector(sellTicket) toTarget:self withObject:nil];
[NSThread detachNewThreadSelector:@selector(sellTicket) toTarget:self withObject:nil];[NSThread detachNewThreadSelector:@selector(ticket123) toTarget:self withObject:nil];
[NSThread detachNewThreadSelector:@selector(sellTicket) toTarget:self withObject:nil];
[NSThread detachNewThreadSelector:@selector(sellTicket) toTarget:self withObject:nil];
}
- (void)sellTicket{
while (_ticket > 0) {
[NSThread sleepForTimeInterval:3]; @synchronized (self){ if (_ticket > 0) { NSLog(@"123"); [NSThread sleepForTimeInterval:3]; self.ticket--; NSLog(@"%@ %ld ", [NSThread currentThread], _ticket); } }
}
} - (void)ticket123 {
// @synchronized (self) {
for (int i = 0; i < 10; i++) {[NSThread sleepForTimeInterval:1]; self.ticket--; NSLog(@"ticker %ld", _ticket); }
}
}
- (void)viewDidLoad {
解决方案
@synchronized(对象)中的这个"对象"是什么?
对象可以是OC的任何对象。
锁定它是为了什么?
防止多个线程同时访问这个对象。相当于加锁。
时间: 2024-10-06 07:37:26