Delay im Programmcode?

Hi,

ich werkele mit Servlets und brauche exklusiven Zugriff auf ne Datei zum Schreiben.

Nun habe ich mir gedacht, das mit einer Static Variablen zu machen, welche ja die Datei dann freigibt oder nicht.

Wenn nun aber 2 User gleichzeitig auf die Zugreifen, soll der eine ja ne weile Warten, wie kann ich denn diese Sleep-Time einbauen?
(irgendein Delay halt)

Oder kennt wer eine Bessere Idee?

Besten Dank

Winni

Hallo Winni,

du könntest das Schreiben über eine eigene Klasse puffern. Dann kann jeder User seine Schreibanforderungen einfach der Klasse übermitteln und weitermachen. Diese arbeitet das ganze dann ab.

Hilft Dir das?

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Grundsätzlich brauchst du ein Objekt über das du alle Zugriffe auf die Datei synchronisierst. Alle Zugriffe finden dann innerhalb eines synchronized-Blocks der über dieses Objekt synchronisiert statt:

synchronized( syncObject )
{
 // Dateizugriff
}

Alle Threads die zugreifen müssen diesselbe Instanz des syncObjects zugreifen. Eine statische Variable würde sich anbieten, am schönsten wäre natürlich die vom Vorschreiber beschriebene Variante mit dem zentralen Objekt das alle Schreibzugriffe koordiniert.

Mit dieser Variante würde intern eine Warteschlange gebildet und alle Threads der Reihenfolge nach abgearbeitet werden. Falls du da mehr Kontrolle darüber haben möchtest kannst du mit wait/notify selber eine Warteschlange implementieren, wird aber meistens nicht notwendig sein.

Wenn allerdings mehrere Prozesse die in unterschiedlichen Umgebungen auf die Datei zugreifen können sollen, dann wird dir nix anderes übrigbleiben als das selber zu machen, der oben beschriebene, einfache Mechanismus geht natürlich nur wenn alle Zugriffe aus einem Prozess erfolgen.

Grüße, Robert

Noch ein Link …
… zum Thema Threads-Synchronization unter Java:

http://www.cs.wcupa.edu/~rkline/OS/Java_locks_semaph…

Grüße, Robert