为什么一定要指定,哪个对象锁定了一个同步代码块?
您不必指定哪个对象锁定了同步方法,因为它总是被“this”锁定(我相信)。
我有两个问题:
- 为什么你不能使用非静态对象来阻止非静态方法 “这个”?
- 为什么一定要指定被屏蔽的对象 同步代码?
我已经阅读了 SCJP for Java 6 的第九章,但我仍然不清楚这一点。
我意识到这可能是一个基本问题,但我是线程的新手。
最佳答案
Why can't you block a none static method with an object other than 'this' ?
您可以:
public void foo() {
synchronized (lock) {
...
}
}
Why do you have to specify the object that has blocked synchronized code?
因为这就是语言设计者选择设计语言的方式。 synchronized
,当用在实例方法上时,隐含地使用 this
作为锁。 synchronized
在 block 上使用时必须明确指定锁。
关于Java 线程 - 同步代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15860465/