zyme000 2015-11-08 09:02 采纳率: 40%
浏览 2321

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);
    }
    

    }

}

  • 写回答

1条回答 默认 最新

  • mifit 2015-11-10 01:12
    关注

    @synchronized(对象)中的这个"对象"是什么?
    对象可以是OC的任何对象。

    锁定它是为了什么?
    防止多个线程同时访问这个对象。相当于加锁。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀