gpt4 book ai didi

java - 当同步方法正在执行时,非同步方法是否会阻塞

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:13:42 26 4
gpt4 key购买 nike

在调用 plain() 方法之前,以下代码块在同步 sync() 方法中。为什么会这样,内在锁不应该只阻止对同步方法的调用——例如,如果 plain() 也被同步,这种行为就没问题了。

由于 java 使用的监视器概念仅适用于同步方法/ block ——根据定义,它不应影响非同步代码的执行。情况是否总是如此,或者此行为是否特定于 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...

最佳答案

您应该在新线程上调用 start() 而不是 run()。调用 run() 将在当前线程中执行 runnable 的 run 方法,而不是启动一个新线程来运行它。

关于java - 当同步方法正在执行时,非同步方法是否会阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12562893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com