Hallo Zusammen,
ich habe ein paar Verständnisfragen zu RMI in Verbindung mit Threads.
Soweit ich gelesen haben wird wenn Client A eine Methode auf dem Server aufruft ein Thread erstellt.
Ruft Client B nun die selbe Methode auf wird ein weiterer Thread erstellt. (Client A und B haben jeweils eine eigene VM)
Wenn A oder B jetzt weiterhin diese Methode aufrufen und der jeweilige alte Thread noch nicht beendet ist ( ist ja z.B durch Clientseitige Threads möglich), ist nicht sichergestellt ob ein 2ter Thread pro Client auf dem Server erzeugt wird oder die Methode in dem vorher erstellten weiterläuft.
So zumindest der Englische Text :
Synchronized sorgt dafür das eine Methode nicht zeitgleich ausgeführt wird, stellt also eine Art FiFo liste dar welche die Aufrufe nach und nach abarbeitet.
Da hier aber ein Thread erstellt wird wäre der Methodenaufruf doch in dem Moment in dem der Thread startet beendet und der folgende Aufruf würde gestartet ohne das der 1ste u.U. fertig ist, oder wird das intern abgefragt?
Weiterhin würde mich interessieren ob es eine Möglichkeit gibt diese "automatische" Erstellung von Threads zu unterbinden, da ich die Anzahl der Threads bei manchen Methoden gerne über einen Threadpool begrenzen würde.
ich habe ein paar Verständnisfragen zu RMI in Verbindung mit Threads.
Soweit ich gelesen haben wird wenn Client A eine Methode auf dem Server aufruft ein Thread erstellt.
Ruft Client B nun die selbe Methode auf wird ein weiterer Thread erstellt. (Client A und B haben jeweils eine eigene VM)
Wenn A oder B jetzt weiterhin diese Methode aufrufen und der jeweilige alte Thread noch nicht beendet ist ( ist ja z.B durch Clientseitige Threads möglich), ist nicht sichergestellt ob ein 2ter Thread pro Client auf dem Server erzeugt wird oder die Methode in dem vorher erstellten weiterläuft.
So zumindest der Englische Text :
Code:
Server-side threads in Java RMI
One method of improving a server’s performance is to create a thread for each remote method
invocation, allowing multiple calls to be processed concurrently. Therefore, several clients are not
blocked in a queue waiting for their call to be executed. Java RMI automatically provides you with
this level of server-side threading; this policy is described as follows in the RMI specification:
“A method dispatched by the RMI runtime to a remote object implementation (a server) may or may
not execute in a separate thread. Calls originating from different clients Virtual Machines will execute
in different threads. From the same client machine it is not guaranteed that each method will run in a
separate thread”
Therefore, if you make remote calls from separate clients (executing in different JVMs) each call will
run in a separate thread. However, if you make concurrent calls from the same client (this can be
acheived by using client-side threading, see later) then it is possible these calls will execute on the
same server thread.
Synchronized sorgt dafür das eine Methode nicht zeitgleich ausgeführt wird, stellt also eine Art FiFo liste dar welche die Aufrufe nach und nach abarbeitet.
Da hier aber ein Thread erstellt wird wäre der Methodenaufruf doch in dem Moment in dem der Thread startet beendet und der folgende Aufruf würde gestartet ohne das der 1ste u.U. fertig ist, oder wird das intern abgefragt?
Weiterhin würde mich interessieren ob es eine Möglichkeit gibt diese "automatische" Erstellung von Threads zu unterbinden, da ich die Anzahl der Threads bei manchen Methoden gerne über einen Threadpool begrenzen würde.