warum sind die struts Action-Klassen nicht thread-sicher?
Lese ich in vielen websites, die Struts Action-Klassen sind nicht thread-sicher . Ich bin nicht in der Lage zu verstehen, warum dies so ist .
Außerdem habe ich ein Buch gelesen, das sagt "Struts action-Klassen werden gecacht und wiederverwendet werden für die Leistung
Optimierung auf die Kosten zur Umsetzung der action-Klassen in eine thread-sichere Weise"
wie ist das caching action-Klassen und thread-sichere Verbindung? .
- wo hast du dies gelesen?
- Diese Buch
- Nur für die Einsicht, dass Buch wurde veröffentlicht März 31, 2007. Struts2 wurde 2008 veröffentlicht. Siehe: en.wikipedia.org/wiki/Apache_Struts#History ... Anyways S2 ist ein sehr anderes Produkt aus S1... nur sagen, um sicherzustellen, dass Sie verstehen, S1 und S2 sind im Zusammenhang nur vom Namen her.
- Ich fügte hinzu, die
struts
tag, da dies hat sich zu einer Art von Vergleich, wie action-Klasse Instanzen unterscheiden sich zwischen den Versionen 1 und 2.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn du cache und re-verwenden Sie Instanzen einer Klasse sind, sodass mehrere threads auf die gleiche Instanz gleichzeitig, dann wird die Klasse ist von Natur aus nicht thread-sicher*. Wenn du veränderliche Instanzen oder statische Felder in der Klasse, die Ergebnisse unter Parallelität wäre unerwartete und problematische. Auf der anderen Seite, wenn jeder thread hat eine eigene Instanz der Klasse, wird die Klasse ist inhärent thread-sicher.
* Falls die Instanz-oder statische Feld ist unveränderlich, dann seine feine, für die mehrere threads zugreifen, es gleichzeitig.
wenn jede Klasse zwischengespeichert und wiederverwendet werden, besteht die Gefahr von Korruption zu tun, um gleichzeitige Zugriffe durch mehrere threads. In einer web-Anwendung, jede Anfrage wird behandelt in einem thread. Können sagen, Sie haben 10 Instanzen einer Handlung, sondern Ihre container handling 20 Anfragen-in diesem Fall, Ihr 10 Aktionen sind jeweils wiederverwendet werden, weil Sie mehr Anfragen im Flug, als Aktionen zur Verfügung service Ihnen.
Dem thread Thema Sicherheit nur wieder aufkommt, wenn es einen Zustand, der wieder in die Aktion. Wenn das der Fall ist, dann eine Aktion, die Wartung eine Anfrage könnte ein Wert in der freigegebenen variable, aber dann ein anderer thread vielleicht übernehmen, und die Aktion vielleicht nochmal ändern Sie die freigegebene variable. In diesem Fall wird, wenn der ursprüngliche thread übernimmt, der freigegebene Status geändert wurde.
Die einfache Möglichkeit zum Umgang mit dieser ist zu konfigurieren, Ihren stack zu nur verwenden Sie immer eine neue Aktion ein, oder stellen Sie sicher, Sie haben keine gemeinsamen Staates in Ihren Handlungen.
Warum nicht eine neue "Aktion" Objekt pro Anfrage? Was in der Welt??
Weil Struts ist so alt, er denkt, dass die Schaffung eines mehr-Objekt pro Anfrage-Zyklus ist so teuer wie zahlen einen dollar für einen Kaffee. (das ist sehr, sehr teuer. weil er wirklich alt ist).
Blick auf das eigentliche Streben der Quelle, du wirst sehen, es gibt einfach zurück, instanziiert action-Klassen zurück. also auf, zwei Anträge können auf den gleichen Instanz-variable, erstellen eine Menge Probleme, wenn es nicht korrekt synchronisiert.