gpt4 book ai didi

java - 从另一个同步方法调用同步方法是否安全?

转载 作者:IT老高 更新时间:2023-10-28 11:48:24 26 4
gpt4 key购买 nike

如果一个同步方法调用另一个同步方法,它是线程安全的吗?

void synchronized method1() {
method2()
}

void synchronized method2() {
}

最佳答案

是的,当您将方法标记为 已同步 时,您确实是在这样做:

void method1() {
synchronized (this) {
method2()
}
}

void method2() {
synchronized (this) {
}
}

当线程调用从method1进入method2时,它将确保它持有对this的锁,它已经拥有,因此它可以通过。

现在当另一个线程试图直接进入method1或method2时,它会阻塞直到它获得锁(this),然后它才会进入这两个方法中的任何一个。

正如 James Black 在评论中所指出的,您必须了解您在方法体内部所做的事情。

private final List<T> data = new ArrayList<T>();

public synchronized void method1() {
for (T item : data) {
// ..
}
}

public void method3() {
data.clear();
}

突然它不是线程安全的,因为您在未来查看 ConcurrentModificationException 因为 method3 是不同步的,因此可以在线程 B 工作时由线程 A 调用在 method1.

关于java - 从另一个同步方法调用同步方法是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5798637/

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