gpt4 book ai didi

java - 读取和写入集合

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

我有以下类(class):

public class GroupsContainer{

private final List<Group> col;

public synchronized Group get(int ids){
return col.get(ids);
}

public synchronized void add(Group g){
col.add(g);
}
}

现在假设某个线程想要获取从 0 到 10 的所有元素:

List<Group> lst;
GroupContainer gc;
//staff
for(int i = 0; i < 10; i++)
lst.add(gc.get(i));

同时另一个线程正在尝试写入从 0 到 10 的新元素:

List<Group> lst;
GroupContainer gc;
//staff
for(int i = 0; i < 10; i++)
gc.add(i, lst.get(i));

我需要执行以下操作:

一旦写入器释放监视器,读取器应立即阻止所有写入器的线程,并且不应允许写入器在完成读取之前写入其他内容。

可以吗?在当前的实现中,它不起作用。

最佳答案

每个方法都是同步的,但您想要同步它们的多个调用(示例中为 10 个)。您可以简单地将代码包装在同步块(synchronized block)中:

 synchronized(gc){
for(int i = 0; i < 10; i++)
lst.add(gc.get(i));
}

关于java - 读取和写入集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31272637/

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