gpt4 book ai didi

java - 如何在不使用 this 的情况下在接口(interface)默认方法内进行同步?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:44 36 4
gpt4 key购买 nike

我在需要同步的接口(interface)中有许多默认方法,似乎只有 this 可用:

default void addUniqueColumns(List<String> names) {
synchronized (this) {
... do something
}
}

问题是,我想在私有(private)锁上同步而不是 this 以便更好地控制:

default void addUniqueColumns(List<String> names) {
synchronized (lock) { // how to get a private lock in a default method??
... do something
}
}

解决方案?聪明的解决方法?或者只是忍受它:)!

最佳答案

您可以将锁对象放入包可见类的公共(public)静态字段中,让所有默认方法共享锁。锁在您的库内仍然可见,但由于具有默认访问权限的类在您的库外不可见,因此该锁对于您的界面您的库外的用户是私有(private)的:

class LockHolder { // Package private class
public static Object LOCK = new Object();
}

public interface ColumnCollection {
default void addUniqueColumns(List<String> names) {
synchronized (LockHolder.LOCK) {
... do something
}
}
}

就您的库而言,与在 this 上同步相比,此技巧为您提供了与使用 private 锁对象相同的优势,因为它防止外人编写的恶意代码访问您的锁。当然,您图书馆的任何部分都可以获取锁。

关于java - 如何在不使用 this 的情况下在接口(interface)默认方法内进行同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20311615/

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