Existe-t-il un moyen général ou des règles permettant d'assurer la sécurité des méthodes statiques utilisées dans les différentes classes d'utilitaires de n'importe quelle application ? Je souhaite ici mettre l'accent sur la sécurité des threads dans les applications Web.
Il est bien connu que les méthodes statiques avec des objets immuables comme paramètres sont sûres pour les threads et que les objets mutables ne le sont pas.
Si j'ai une méthode utilitaire pour une manipulation de java.util.Date
et cette méthode accepte une instance de java.util.Date
cette méthode ne serait pas sûre pour les threads. Alors comment la rendre thread safe sans changer la façon de passer les paramètres ?
public class DateUtils {
public static Date getNormalizeDate(Date date) {
// some operations
}
}
Il y a aussi la classe javax.faces.context.FacesContext
mutable ? Est-il possible de passer une instance de cette classe à une telle méthode utilitaire statique ?
La liste des classes dont les instances peuvent ou ne peuvent pas être transmises en tant que paramètres pourrait être longue ; quels sont donc les points à garder à l'esprit lors de l'écriture des codes de ces classes utilitaires ?
12 votes
Pourquoi un vote négatif et une demande de fermeture ? Est-ce une mauvaise question ?
0 votes
Avez-vous envisagé de rendre cette méthode statique
synchronized
?16 votes
@AndrewLogvinov oui j'y ai pensé. Mais je ne veux pas rendre une méthode synchronisée sans savoir pourquoi je le fais. Dans quelles situations devrions-nous rendre une méthode statique synchronisée ?
3 votes
@TapasBose La question du dernier commentaire peut probablement donner lieu à un livre ou deux. Je recommanderais Concurrence Java en pratique .
2 votes
Vous devez synchroniser les méthodes (statiques et d'instance) qui accèdent aux variables mutables. Dans le cas des classes utilitaires, je n'en vois pas l'utilité puisqu'elles devraient être sans état.