Raj*_*Raj 17 java thread-synchronization
我对Java同步有疑问.我想知道我的类中是否有三个Synchronized方法,并且一个线程在一个synchronized方法中获取锁定,其他两个将被锁定?我问这个问题,因为我对以下陈述感到困惑.
当一个线程在一个对象的synchronized方法中时,所有其他希望执行这个synchronized方法或该对象的任何其他同步方法的线程都必须等待.此限制不适用于已具有锁定并正在执行对象的同步方法的线程.这种方法可以调用对象的其他同步方法而不会被阻塞.当然,任何线程都可以随时调用对象的非同步方法
bez*_*max 16
java中的同步是通过在某个特定对象上监视监视器来完成的.因此,如果你这样做:
class TestClass {
SomeClass someVariable;
public void myMethod () {
synchronized (someVariable) {
...
}
}
public void myOtherMethod() {
synchronized (someVariable) {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,这两个块将在任何时候通过执行2个不同的线程来保护,而someVariable不会被修改.基本上,据说这两个块与变量同步someVariable.
当你synchronized使用该方法时,它基本上意味着与synchronized (this)执行此方法的对象上的同步相同.
那是:
public synchronized void myMethod() {
...
}
Run Code Online (Sandbox Code Playgroud)
意思相同:
public void myMethod() {
synchronized (this) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
因此,回答你的问题 - 是的,线程将无法同时在不同的线程中调用这些方法,因为它们都持有对同一监视器,this对象监视器的引用.