# synchronized Klasse?



## Guest (22. Jul 2006)

Hallo, gibt es in Java eine Möglichkeit bzw. ein keyword, mit dem man alle Methoden einer Klasse als synchronized deklarieren kann? Ich habe eine Klasse, die Methoden zum Zugriff auf Hardware enthalt (JNI). Im Moment  sind alle Methoden als synchronized deklariert. Ich habe mich gefragt ob irgendwie die ganze Klasse als synchronized deklarieren werden kann ?!


----------



## byte (22. Jul 2006)

Das synchronized Keyword geht nur an Methoden bzw. als Blöcke in Methoden. Du musst also alle alle Methoden der Klasse synchronized machen. Dann nutzen alle Methoden die gleiche Lock des Objects. Verwendest Du in Deiner Anwendung denn überhaupt mehrere Threads? Denn wenn Du nur einen Thread verwendest, dann bringt synchronized nichts, weil dann eh alles sequentiell ausgeführt wird.


----------



## Der_Unwissende (22. Jul 2006)

Hi,
ich würde sogar sagen, dass gerade wenn man mehrere Threads verwendet man vorsichtig sein sollte eine ganze Klasse synchronized zu halten. Klar, irgendwie muss man sich zwar Overhead schaffen, aber der Sinn vom Threading ist das eigentlich nicht. Besser ist es eine Sperre nur da zu setzen, wo sie wirklich nötig ist. Es gilt immer so spät wie möglich erstellen, so früh wie möglich wieder freigeben.

Gruß Der Unwissende


----------



## Guest (22. Jul 2006)

Hallo,



			
				byto hat gesagt.:
			
		

> Verwendest Du in Deiner Anwendung denn überhaupt mehrere Threads?


Ich habe eine fertige Client/Server-Anwendung bekommen, die in C++ progremmiert ist. Der Cleint-Code besteht eus mehreren Tasks, die vom Server bestimmte Informaitionen abfragen. Meine Aufgabe besteht darin, eine Java-GUI zu erstellen, mit der man diese Informationen ausgeben/beobachten kann. Die GUI soll ferner die Möglichkeit beiten, nur die ausgewahlten Informationen anzuzeigen und für jede Information eine Update-Periode festzulegen. Ich dachte, es sei besser, wenn ich für jeden C++ Task einen Java-Task programmiere, der über JNI (alle Methoden greifen auf die Hardware) die gewünschten Informationen abholt bzw. anzeigt, sobald er gestartet wird.



			
				Der_Unwissende hat gesagt.:
			
		

> Besser ist es eine Sperre nur da zu setzen, wo sie wirklich nötig ist. Es gilt immer so spät wie möglich erstellen, so früh wie möglich wieder freigeben.


Mir ist keine bessere Idee eingefallen als die ich geschieldert habe. Wichtig ist nur, dass diese Informationen in einer vorgegebenen Periode aktualisiert werden sollen. Für besseren Vorschläge würde ich sehr Dankbar.

Gruß


----------



## Der_Unwissende (22. Jul 2006)

Nur um noch mal zu schauen, dass ich dich richtig verstanden habe:
Du greifst auf Informationen zurück, die du in einzelnen Threads abholst. Was dazu nötig ist, ist ja erstmal egal. Einfach gesagt wird ein Aufruf gestartet (egal ob entfernt oder lokal), der dir einen bestimmten Wert liefert. 

Jeder Thread holt sich genau einen solchen Wert bzw. keine zwei Threads holen sich den gleichen Wert, oder?

Und jeder Thread stellt dann in einem Controll diesen Wert da (auch wieder jeder in einem eigenen?). Das ganze wird dann in gewissen Intervalen (individuell für jeden Thread) wiederholt?

Wenn das soweit richtig ist, würde ich noch nicht sehen, wozu du die ganze Methode synchronisierst. Das holen eines Wertes in einem Thread ist eigentlich nichts was du sperren brauchst. Du kannst diesen Wert in einer lokalen Variable des Threads speichern. Nun kommt es nur noch zur Anzeige. Kann ein Wert X von mehr als einem Thread geholt werden, sollte natürlich die Anzeige synchronisiert werden (hier kannst du dann auf ein gemeinsames Objekt sperren). Nur bei der Anzeige könnte es dann zu einem konkurrierenden Zugriff kommen. 
Gilt natürlich auch nur, wenn der Wert X an mehr als einer Stelle angezeigt werden soll. Ansonsten sehe ich auch dort eigentlich keine Probleme. 

Gruß Der Unwissende


----------



## byte (22. Jul 2006)

Wenn sich die GUI eh bloß alle x Zeiteinheiten aktualisieren soll, brauchst das doch nicht (auf der Java Seite) Multithreaded zu machen. Sehe da keine Vorteile gegenüber einer sequentiellen Lösung.


----------



## Der_Unwissende (23. Jul 2006)

Also wenn ich es richtig verstanden habe, sind die Update-Zeiten der einzelnen Werte doch unterschiedlich. Das lässt sich imho durch Threads leichter implementieren und falls die Werte auch geloggt werden (oder später um diese Funktionalität erweitert), dann ist es so auch einfacher dies nicht-sequentiell zu machen.


----------

