T
TangoFan
Gast
Mal ne generelle Frage zur Synchronisation. Habe folgendes Code-Konstrukt:
Das Problem ist, ich will die Synchronisation optimieren. Habe ein Servlet welches die Requests entgegen nimmt. Hier können noch mehrere Threads darauf zugreifen. In dem synchronized-Block ist der Ablauf der Befehle dort drinnen fest vorgegeben, diese müssen synchronisiert hintereinander ablaufen da unter anderen in eine gemeinsame Datenstruktur ("gemeinsameDatenstruktur") geschrieben wird. Das einzige was ich nun "outsourcen" könnte wäre der Methodenaufruf von der Klasse "AndereKlasse". Diese "AndereKlasse" verarbeitet gleichzeitig mehrere Threads und hätte kein Problem wenn mehrere Threads dieselbe Funktion "andereMethode" aufrufen. Allerdings benötigt dieser Methodenaufruf einiges an Zeit.
Gibt es eine Möglichkeit den Methodenaufruf auszulagern damit dieser wenigstens wieder Thread-fähig wird?
Code:
public class MeineKlasse {
...
private static ArrayList gemeinsameDatenstruktur = new ArrayList();
public void doGet(HttpServletRequest request, HttpServletResponse response)...
{
...
synchronized(this)
{
..tue etwas wichtiges..
..tue noch was wichtiges..
AndereKlasse ak = new AndereKlasse();
String wichtig = ak.andereMethode(etwasBerechnen);
gemeinsameDatenstruktur.add(wichtig);
}
Das Problem ist, ich will die Synchronisation optimieren. Habe ein Servlet welches die Requests entgegen nimmt. Hier können noch mehrere Threads darauf zugreifen. In dem synchronized-Block ist der Ablauf der Befehle dort drinnen fest vorgegeben, diese müssen synchronisiert hintereinander ablaufen da unter anderen in eine gemeinsame Datenstruktur ("gemeinsameDatenstruktur") geschrieben wird. Das einzige was ich nun "outsourcen" könnte wäre der Methodenaufruf von der Klasse "AndereKlasse". Diese "AndereKlasse" verarbeitet gleichzeitig mehrere Threads und hätte kein Problem wenn mehrere Threads dieselbe Funktion "andereMethode" aufrufen. Allerdings benötigt dieser Methodenaufruf einiges an Zeit.
Gibt es eine Möglichkeit den Methodenaufruf auszulagern damit dieser wenigstens wieder Thread-fähig wird?