gpt4 book ai didi

java - 同时从列表中删除对象

转载 作者:行者123 更新时间:2023-12-03 12:47:56 25 4
gpt4 key购买 nike

我想从列表中删除一个对象,但是我有一个线程正在使用迭代器一致地检查同一列表。我已经有要删除的对象,是否需要使用另一个迭代器来遍历列表,同时检查对象,然后使用迭代器将其删除,或者有更简单的方法吗?现在,如果我尝试使用remove方法从列表中删除对象,则线程上的迭代器会给我一个NoSuchElementException

//Threaded loop.
Iterator<Client> playersIterator = getPlayers().iterator();
while(playersIterator.hasNext()){
Client c = playersIterator.next(); //NoSuchElementException
if(c.getSocket().isClosed()) {
playersIterator.remove();
if(getHost() == c) {
assignNewHost();
}
getServer().getLobbyHandler().updateGames();
}
}


//Use an iterator to remove?
public void removePlayerFromGame(Client client) {
Game g = getServer().getGame(client);
if(g != null) {
g.getPlayers().remove(client);
}
}

最佳答案

使用synchronized控制对资源的访问...

https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html

synchronized {
// your code will wait before removing the object
g.getPlayers().remove(client);
}

关于java - 同时从列表中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33084940/

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