Werden die Wiederherstellung von Methoden in einer Webanwendungsanwendung von Java-Struds Streitigkeiten verursachen?

StackOverflow https://stackoverflow.com/questions/8323901

Frage

Ich arbeite mit einem Unternehmen zusammen, das eine Webanwendung mit Struts mit Java produziert. Ich habe kürzlich einen Großteil des Codes neu gestaltet, um das System aufzuräumen. Eine Technik, die ich verwendet habe endlich Blöcke, von Methoden zu einer Versorgungsklasse. Die Versorgungsklasse ist statisch und verfügt über enge Methoden für verschiedene Arten von Streams. Durch dieses Refactoring speichere ich jedes Mal, wenn ein Stream geschlossen wird, 5 Codezeilen, was in einigen Klassen um 600 Zeilen reduziert wird, was ihn sehr günstig macht. Ich mache mir jedoch Sorgen, dass es möglich sein kann, diese Methode in die Produktion zu behaupten.

Ich bin nur auf das Konzept der Streitigkeiten in der Multithread -Programmierung gestoßen. Deshalb bin ich mir nicht sicher, ob dies in diesen Fällen Probleme verursacht.

Ist das möglich? Oder einfach mein Missverständnis von Streitigkeiten, statischen Methoden, Webanwendungen usw.?

Vielen Dank im Voraus, Alexei Blue.

War es hilfreich?

Lösung

Es sei denn, die statischen Methoden arbeiten ausschließlich auf ihren Parametern und Sie versuchen nicht, denselben Strom mehrmals zu schließen, dass es Ihnen gut gehen sollte.

Methoden im Allgemeinen können gleichzeitig ausgeführt werden. Die Synchronzation funktioniert immer an Objekten, und daher sollte keine Konsequenzen auftreten, wenn die in diesen Methoden verwendeten Objekte völlig unterschiedlich sind.

Andere Tipps

Es ist die beste Praxis, den gesamten offenen Dateihandler im selben Bereich zu schließen. Wenn beispielsweise ein Dateiausgabestream in einer Methode geöffnet ist, sollte sie auch in dieser Methode geschlossen werden. Dies verhindern auch den größten Teil des Parallelitätsproblems (aber nicht immer). Es gibt jedoch viele Ausnahmen, um dies nicht zu tun, aber das Verfolgen und Schließen aller Dateibehandlungen wäre in diesem Fall schwieriger.

Zu Ihrer Information, es gibt eine Abschlussmethode, die genau das tut, was Sie in Apache Common IO beschreiben. Ioutils. Es ist eine beliebte Bibliothek, die Sie verwenden können.

Dies ist eine gängige Praxis, beispielsweise die Kleidung in der Guave -Klasse. Übrigens sollten Sie nur eine Methode benötigen, um praktisch alles in Java schließen zu können:

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

Da alle Streams und Leser die schließbare Schnittstelle implementieren, sollte diese eine Methode für alle Ihre Bedürfnisse ausreichen.

Im Allgemeinen wird dies keine Streitigkeiten verursachen, es sei denn, Sie versuchen, aus dem Stream in Say Thread-A zu lesen, wobei Thread-B den Stream schließt. Aber wenn dies der Fall wäre, hätten Sie diese Auseinandersetzung mit oder ohne dieses Refactoring. Allein dieses Refactoring wird keine einführen zusätzlich Streit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top