Question

Je travaille avec une entreprise qui produit une application Web à l'aide des entretoises avec Java. Je suis refactoring beaucoup de code récemment pour ranger le système. Une technique que je l'ai utilisé est de passer des déclarations de clôture des cours d'eau, enfin blocs, des méthodes d'une classe utilitaire. La classe de service est statique et possède des méthodes proches pour les différents types de flux. En faisant cela refactorisation je sauve 5 lignes de code à chaque fois qu'un flux doit être fermé qui a réduit le code dans certaines classes de 600 lignes qui le rend très favorable. Cependant, je suis inquiet en faisant cela qu'il peut être possible de provoquer un conflit sur les méthode si la mise en production.

Je suis venu seulement à travers le concept de discorde dans la programmation multithread avant qui est la raison pour laquelle je ne suis pas sûr que cela causera des problèmes dans ces cas.

Est-ce possible? ou tout simplement mon incompréhension de discorde, les méthodes statiques, les applications Web, etc.?

Merci à l'avance, Alexei bleu.

Était-ce utile?

La solution

A moins que les méthodes statiques fonctionnent uniquement sur leurs paramètres et vous ne cherchent pas à en même temps près le même flux plusieurs fois, vous devriez être bien.

Méthodes en général peuvent être exécutées simultanément. Synchronzation toujours travailler sur des objets et donc affirmation ne doit pas se produire si les objets que vous utilisez dans ces méthodes sont totalement distinctes.

Autres conseils

Il est préférable pratique de fermer tout le gestionnaire de fichier ouvert dans le même champ. Par exemple, lorsqu'un outputstream de fichier est ouvert dans une méthode, il devrait également être fermé avec dans cette méthode. Cela a également éviter la plupart des problèmes de concurrence (mais pas toujours). Cependant, il y a beaucoup exception pour ne pas le faire, mais le suivi et la fermeture de tous les gestionnaire de fichiers serait plus difficile dans ce cas.

Pour votre information, il existe une méthode de fermeture qui fait exactement ce que vous décrivez dans Apache Common IO, IOUtils . Il est une bibliothèque populaire que vous pouvez envisager d'utiliser.

Ceci est une pratique courante, pour un look d'exemple à la classe Closeables à Goyave. Soit dit en passant, vous devriez seulement besoin d'une méthode pour pouvoir fermer pratiquement tout en Java:

public static void closeQuietly(Closeable closeable) {
  if (closeable != null) {
    try {
      closeable.close();
    } catch (RuntimeException re) {
      // Do something or ignore...
    }
  }
}

Comme tous les cours d'eau et lecteurs implémentent l'interface Closeable, cette seule méthode devrait suffire pour tous vos besoins.

En général, ce ne sera pas provoquer un conflit, à moins que vous essayez de lire du flux en dire Discussion-A, où cette discussion-B est la fermeture du flux. Mais si tel était le cas, alors vous auriez cette affirmation avec ou sans ce refactoring. Ce refactoring seulement pas introduire de supplémentaire contention.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top