chickenwings
Erfahrenes Mitglied
Hallo Leute,
bin immer wieder mit dem Thema Threadsicherheit konfrontiert. Teilweise ist es einfach zu erkennen, ob ein Abschnitt Threadsicher ist (bspw. durch synchronized), teilweise ist es aber eben nicht trivial.
Solch einen nicht trivialen Fall habe ich gerade, der zu Diskussionen einlädt. Ich möchte hier einfach mal das Problem abstrakt erörtern, vielleicht hat jemand etwas schlaues dazu zu sagen oder gar Anregungen zur Verbesserung.
Es gibt da ein Servlet, dass mehrere 10tausendmal pro Tag aufgerufen wird. Dieses Servlet nimmt den Request entgegen, validiert einige Paremeter und ruft dann über einen Executors.newSingleThreadExecutor() einen Thread als Service auf, der sich um die Verarbeitung des Requests, bzw. dessen Parameter kümmert. Der Nachteil eines Servlets ist ja, dass der Container eine Menge von Servlets initiiert und dann seine Threads mit diesen Objekten versorgt. Das heisst, jedes Servlet wird mehrmals verwendet.
Die Frage, die sich jetzt stellt ist, ist das Servlet bzw. der eigentliche Service threadsicher? Der Block in dem der Thread über den Executor erzeugt wird ist übrigens nicht synchronisiert.
cheickenwings
bin immer wieder mit dem Thema Threadsicherheit konfrontiert. Teilweise ist es einfach zu erkennen, ob ein Abschnitt Threadsicher ist (bspw. durch synchronized), teilweise ist es aber eben nicht trivial.
Solch einen nicht trivialen Fall habe ich gerade, der zu Diskussionen einlädt. Ich möchte hier einfach mal das Problem abstrakt erörtern, vielleicht hat jemand etwas schlaues dazu zu sagen oder gar Anregungen zur Verbesserung.
Es gibt da ein Servlet, dass mehrere 10tausendmal pro Tag aufgerufen wird. Dieses Servlet nimmt den Request entgegen, validiert einige Paremeter und ruft dann über einen Executors.newSingleThreadExecutor() einen Thread als Service auf, der sich um die Verarbeitung des Requests, bzw. dessen Parameter kümmert. Der Nachteil eines Servlets ist ja, dass der Container eine Menge von Servlets initiiert und dann seine Threads mit diesen Objekten versorgt. Das heisst, jedes Servlet wird mehrmals verwendet.
Die Frage, die sich jetzt stellt ist, ist das Servlet bzw. der eigentliche Service threadsicher? Der Block in dem der Thread über den Executor erzeugt wird ist übrigens nicht synchronisiert.
cheickenwings