gpt4 book ai didi

java - 为什么抽象方法不能同步?

转载 作者:IT老高 更新时间:2023-10-28 21:18:12 25 4
gpt4 key购买 nike

我正在阅读 thread from CodeRanch说抽象方法不能同步,因为抽象类不能被实例化,意味着没有对象可以锁定。

这没有意义,因为抽象类是子类的定义(契约)。同步方法的抽象定义不需要锁,子进程需要。所有抽象标题都表明子必须同步此方法。我对此的逻辑是否正确?如果没有,有人可以解释我为什么错了吗?

最佳答案

关于无法实例化抽象类的评论是垃圾。鉴于它必须是抽象的实例方法,所以肯定有 一个可以锁定的引用。抽象类中的具体方法仍然可以引用this。但是,这仍然不意味着抽象类应该能够同步。

方法是否同步是方法的实现细节任何地方都没有将同步指定为声明性契约——它也不像您可以在接口(interface)中同步。

一个类如何实现它提供的任何线程安全保证取决于它。如果一个抽象类想要授权一个特定的方法,它应该使用模板方法模式:

// I hate synchronizing on "this"
private final Object lock = new Object();

public final void foo() {
synchronized(lock) {
fooImpl();
}
}

protected abstract void fooImpl();

但这本身就很危险,因为它在锁中有效地调用“未知”代码,这是导致死锁等的秘诀。

关于java - 为什么抽象方法不能同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12805698/

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