gpt4 book ai didi

Java子链表内存分配

转载 作者:行者123 更新时间:2023-11-30 07:54:03 25 4
gpt4 key购买 nike

Java 提供了 subList 函数来获取指定索引之间的 ListView ,并由父列表支持,这意味着对 subList 所做的任何更改都将反射(reflect)在实际列表。我想知道的是,如果线程尝试访问这些子列表,它们是否会被父列表锁定。

举个例子,如果我有一个包含 100 个元素的 ArrayList,并且我创建了 4 个子列表,每个子列表有 25 个元素,并且 4 个线程尝试在这些子列表上并行工作,那么它们会独立工作吗?以真正并行的方式子列表,还是第一个执行的线程会锁定后备数组列表?

如果默认情况下未锁定数组列表,我假设线程将在子列表上并行运行,而无需相互等待,并且如果我以编程方式确保或更确切地说逻辑本身确保这些线程永远不会在除他们的子列表那么它真的是子列表的并行处理,对吗?

executor.addTask(new Thread(doneSignal, parentList.subList(subListStart, subListEnd)));

我问的原因是,我尝试并行循环子列表,发现它比不创建 4 个线程并循环实际父列表要慢得多。

最佳答案

正如 Javadoc for java.util.ArrayList 中所述:

Note that this implementation is not synchronized. If multiple threads access an ArrayList instance concurrently, and at least one of the threads modifies the list structurally, it must be synchronized externally.

当然,这适用于subList方法。因此,ArrayList 本身不执行任何锁定操作;如果您需要,您需要自己做。

关于Java子链表内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32934153/

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