3
在调用plain()方法之前,同步sync()方法中的以下代码块。为什么会这样呢,不应该只对同步方法调用内部锁块 - 例如,如果同时使用了plain(),这种行为也会很好。同步方法执行时,非同步方法是否阻塞
由于java使用的监视器概念仅适用于同步的方法/块 - 它的定义不应影响非同步代码的执行。情况总是如此,或者这种行为是特定于JVM实现的。
public class Main {
public static void main(final String[] args) {
final Main main = new Main();
new Thread(new Runnable() {
@Override
public void run() {
main.sync();
}
}).run();
main.plain();
}
public synchronized void sync() {
try {
System.out.println("sleeping...");
Thread.sleep(2000);
System.out.println("out...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void plain() {
System.out.println("plain...");
}
}
输出:
sleeping...
out...
plain...
哦天啊..我做了什么..谢谢!! – haps10
@ haps10它碰巧是我们最好的:-) – maba