gpt4 book ai didi

java - 调用synchronized静态方法,那么可以访问其他静态方法吗?

转载 作者:行者123 更新时间:2023-12-01 12:20:27 24 4
gpt4 key购买 nike

我有一个关于同步静态方法的问题。
如果我调用一个同步静态方法,是否意味着我锁定了该类,并且在同步静态方法结束之前无法访问其他方法(包括静态或非静态)?

当同步静态方法锁定类对象时,为什么可以同时调用其他静态方法?

class Y {
static synchronized void staticSleep() {
System.out.println("Start static sleep");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
System.out.println("End static sleep");
}
static void staticSleepNoSyn() {
System.out.println("Start static NoSyn sleep");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
System.out.println("End static NoSyn sleep");
}
}

public class X {
public static void main(String[] args) {
for (int i = 0; i < 2; ++i) {
new Thread(new Runnable() {

public void run() {
Y.staticSleep();
}
}).start();
}

for (int i = 0; i < 10; ++i) {
new Thread(new Runnable() {

public void run() {
Y.staticSleepNoSyn();
}
}).start();
}
}
}

输出:

Start static sleep
Start static NoSyn sleep
Start static NoSyn sleep
Start static NoSyn sleep
Start static NoSyn sleep
Start static NoSyn sleep
Start static NoSyn sleep
Start static NoSyn sleep
Start static NoSyn sleep
Start static NoSyn sleep
Start static NoSyn sleep
End static sleep
Start static sleep
End static NoSyn sleep
End static NoSyn sleep
End static NoSyn sleep
End static NoSyn sleep
End static NoSyn sleep
End static NoSyn sleep
End static NoSyn sleep
End static NoSyn sleep
End static NoSyn sleep
End static NoSyn sleep
End static sleep

最佳答案

我现在明白你在问什么了。

If i invoke a synchronized static method, does it mean i lock this class and other method (including static or no static) can not be accessed before the synchronized static method end?

如果两种方法都是同步或使用同步 block ,并且它们在同一事物上同步(即相同的或相同的this,那么你就会得到互斥。

在您的示例中,一种方法不是同步(并且它不使用同步 block ),因此它不会被锁定。事实上,没有什么可以锁定 staticSleepNoSyn ...正如您所写的那样。

关于java - 调用synchronized静态方法,那么可以访问其他静态方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26698305/

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