J'ai un gestionnaire de classe qui va être accédé par plusieurs threads en même temps, je veux savoir si je l'ai fait de la bonne façon?
aussi je pense que je dois être RemoveFoo atomique, mais je ne suis pas sûrjava thread safe code + une méthode atomique question
public class Manager
{
private ConcurrentHashMap<String, Foo> foos;
//init in constructor
public RemoveFoo(String name)
{
Foo foo = foos.Get(name);
foo.RemoveAll();
foos.Remove(name);
}
public AddFoo(Foo foo)
{...}
}
public class Foo
{
private Map<String,Bar> bars;
//intialize it in constructor
//same for RemoveBar
public void AddBar(Bar bar)
{
synchronized(this)
{
bars.put(bar.id, bar);
}
}
public void RemoveAll()
{
synchronized(this)
{
//some before removall logic for each one
bars.remove(bar.id, bar);
}
}
}
public class Bar
{}
Je ne sais pas java mais dans C# yuh devrait verrouiller la synchronisation sur quelque chose de privé donc ce n'est pas le meilleur choix ... – Peter
En fait, ce n'est pas le cas et cela ralentirait l'accès aux foos vers le bas. Vous avez besoin de vérifier null sur foo bien que @Aaron a souligné. – Robin