gpt4 book ai didi

java - 同步访问速度慢

转载 作者:行者123 更新时间:2023-12-01 22:20:32 24 4
gpt4 key购买 nike

我在多个线程之间共享一个列表。线程所需的所有数据在启动之前就已存在,我不会向列表中添加任何其他值。每个步骤都在列表中获取一个值,该值将从列表中删除,并且完成远程调用。该 block 已同步。

    while (!contactList.isEmpty()) {

Contact contact = null;

synchronized (contactList) {

if (!contactList.isEmpty()) {

contact = contactList.get(0);
contactList.remove(0);
}
}
//call the service with contact
}

有没有更有效的方法来完成这项工作?

目前,获取所有联系人并将其拆分为多个单独的程序的速度更快。

最佳答案

如果您真的只想从列表前面提取元素并且想确保它们在那里,那么您应该查看 ConcurrentLinkedQueue反而。这也保证了 O(1) 的插入和删除,因为插入发生在队列的末尾,而检索发生在队列的头部,而不需要向下移动元素。

因为您在进入此 block 之前声明数据已存在,所以如果列表本身为空,则对 poll 的调用只会返回 null。从那里,您必须决定从队列返回 null 意味着什么。

一个(非常粗略的)示例:

ConcurrentLinkedQueue<Contact> contactQueue = new ConcurrentLinkedQueue<>();
Contact contact = contactQueue.poll(); // will return null if empty

关于java - 同步访问速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29902379/

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