当我有三种方法时:
-(void) a {
@synchronized(self) {
//part a
}
}
-(void) b {
@synchronized(self) {
//part b
}
-(void) c {
// part c
}
并且线程在部分a中,那么将为其他线程阻止部分c?
答案 0 :(得分:8)
只有@synchronized
块互相交互。只要一个线程正在执行部分A
或部分B
,其他线程就不能进入部分A
或部分B
。部分C
不受此影响。
您上面的新评论更加清晰,实际上是在问什么。
在@synchronized(self)
中,self
不是锁定自身的东西,是 使用作为锁来保证只有一个线程一次可以进入@synchronized
区块。
正如official documentation所解释的:您可以将任何对象用作信号量。
chapter on synchronization全面描述了所有可用的锁定选项,顺便说一句。