【问题标题】:Can I create an array of Condition variables in Java?我可以在 Java 中创建一个条件变量数组吗?
【发布时间】:2019-03-30 02:00:02
【问题描述】:

我正在尝试使用条件变量来实现监视器。我的问题是我想创建许多条件变量。

private Lock lock = new ReentrantLock();
final Condition[] self;

如何初始化Condition-typeself数组?

【问题讨论】:

  • 你可以像任何数组一样初始化它。它有多大以及您使用哪些实例来填充它取决于您要执行的操作。
  • 您可能需要考虑使用ArrayList 或类似结构,该结构具有简单的add()put()get() 方法来根据需要添加/删除/访问元素。比意识到你需要调整数组的大小要好得多...

标签: java monitor


【解决方案1】:

我建议创建一个条件列表。

代码示例:

List<Condition> conditions = new ArrayList<Condition>();
Lock lock = new ReentrantLock();
conditions.add(lock.newCondition());

【讨论】:

    【解决方案2】:

    感谢 Slaw 和 Stephen C 纠正了我糟糕的第一个答案。

    初始化您的 final 数组,就好像它不是最终的一样。 [Slaw 的词不准确->] final 关键字意味着您不能将数组重新分配给新数组。你仍然可以modify数组中的元素。

    例如,您可以将数组“self”初始化为new Condition[1];,然后执行self[0] = new Condition(),然后执行System.out.println(self[0]);

    【讨论】:

    • 更好:) 现在我只想指出,不应该通过new Condition() 创建Condition 的实例——顺便说一句,这是一个接口。相反,它们是通过Lock.newCondition()Lock 实例创建的。
    • 我没有走这条路,因为@Slaw 提到您无法使用new Condition[1] 初始化条件变量。
    • @dreamerboy 这不是我说的。我说通过new Condition() 创建条件是错误的。使用new Condition[1] 创建数组。要填写它,您可以执行self[0] = lock.newCondition() 之类的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2020-08-10
    • 2014-06-17
    • 1970-01-01
    • 2017-12-18
    相关资源
    最近更新 更多