I ont un code Java multithread, dans lequel:synchronisation sur les variables locales
- plusieurs fils lire des objets avec état de la mémoire partagée synchronisé (à savoir à la suite de cela, certains fils peuvent référencer les mêmes objets); Chaque thread appelle alors une méthode
process()
et passe son objet là; process()
traite les objets d'une manière ou d'une autre, ce qui peut entraîner la modification de l'état des objets;- ces modifications d'état doivent être synchronisées.
J'ai créé une méthode comme ça:
public void process(Foo[] foos) {
for (final Foo foo : foos) {
if (foo.needsProcessing()) {
synchronized (foo) {
foo.process(); // foo's state may be changed here
}
}
}
}
Au meilleur de ma connaissance, cela semble légitime. Cependant, l'inspection d'IntelliJ se plaint de la synchronisation sur la variable locale parce que "les différents threads sont très susceptibles d'avoir différentes instances locales" (pas valide pour moi, car je suis pas initialisation des foos dans la méthode). Essentiellement, ce que je veux réaliser ici est le même que d'avoir la méthode Foo.process() synchronisée (ce qui n'est pas une option pour moi, car Foo fait partie de la bibliothèque 3rd party). Je me suis habitué au code sans marques jaunes, donc tout conseil de la communauté est apprécié. Est-ce vraiment si mauvais de faire la synchronisation sur les locaux? Y a-t-il une alternative qui fonctionnera dans ma situation?
Merci d'avance!
Droit, merci! BTW, que pensez-vous de la question principale ici? Est-ce vraiment si mauvais de se synchroniser sur les locaux? –