Rob*_*ume 1 java multithreading
我的理解是当对象方法"同步"时,那么该方法中只允许一次使用一个线程.我测试了它并且它起作用了.
但最近有人告诉我,线程必须获得控制才能访问同步方法的"锁定"是"对象锁定".意味着对象的所有方法(已同步或未同步)有效地以同步方式运行.
我用synchronized void method1();和测试了,并且void method2();看起来许多线程能够同时进入method2.
什么是这个人所指的"对象锁定"以及它是如何工作的?
他的意思是,如果你有两个同步的方法,它们将彼此同步,而不仅仅是单独的.这是因为对象锁被保存在调用该方法的实例上.
换句话说,如果您有两个同步方法,foo()并且在另一个线程正在调用时bar()没有线程可以bar()调用foo().
如果你写出定义,这很容易看出.同步方法
public synchronized void foo() {
stuff;
}
Run Code Online (Sandbox Code Playgroud)
相当于:
public void foo() {
synchronized(this) {
stuff;
}
}
Run Code Online (Sandbox Code Playgroud)
对于没有关联实例的方法(即静态方法),将在Class实例上保持锁定.