hap*_*s10 3 java concurrency multithreading synchronized
在调用plain()方法之前,以下代码在synchronized 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...");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
sleeping...
out...
plain...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |