我想要有線程安全的同步集合(列表或集合)。我的集合將包含變量類的對象,它具有名稱,值等文件。現在讓我們說兩個線程想要修改列表中的對象(添加新的或刪除現有的對象)。什麼是最好的解決方案呢?我在stackoverflow上找到了這樣的smth。同步收集的變量
List<Variable> varList = Collections.synchronizedList(new ArrayList<Variable>());
void processList(List<Variable> varList, String name)
{
synchronized(varList) {
varList.stream().filter(o -> o.getName().equals(name)).findFirst().ifPresent(o -> o.setValue(100));
// or
varList.remove(0);
// or
varList.add(new Variable());
}
}
它會工作沒有任何問題嗎?還是有更好的解決方案?
如果線程修改列表中的'Variable'對象那麼'Variable'類必須是線程安全的,而不是名單。 –
這工作,列表將是線程安全的。 –
如果你的Variable.class是可變的,那麼你可以在這個對象上共享狀態,這可能導致另一個「競爭條件」。 –