Wenn immer nur einer darf .

Status
Nicht offen für weitere Antworten.

Maddy

Mitglied
Hi,

ich bin nicht ganz fremd in nebenläufiger Programmierung, aber zu meinem aktuellen Problem finde ich keinen Einstieg:

Ich habe ein Verzeichnis mit Dateien, die alle nacheinander von meinem Java-Programm behandelt werden sollen. Das ganze ist als Client-Server-Anwendung ausgelegt, es können also durchaus auch mehrere Leute mit der Abarbeitung beschäftigt sein.
Nun gibt es genau eine Methode, die bei Anforderung einer neuen Datei entscheidet, welche Datei ausgeliefert wird. Ist die Datei bestimmt, wird sie an eine andere Stelle verschoben und ist damit für die weitere Auslieferung anderer Dateien nicht mehr verfügbar. Jetzt muss ich nur sicherstellen, dass nicht zwei Clients im gleichen Moment eine neue Datei anfordern und dank des Algorithmus auch genau die gleiche Datei bekommen.

Mir geht es jetzt darum: wie sichere ich genau für diese eine Methode zu, dass immer nur ein Thread darauf zugreifen darf?

Hier mal ein wenig Pseudocode zur Veranschaulichung
Code:
// Datei-Auslieferung
public String getNewFile() {
  String filename = chooseFile(); <-- Hier muss sichergestellt werden, dass jeder Aufruf ein anderes Ergebnis bringt

  Runtime rt = Runtime.createProcess();
  rt.exec(program, filename); // hier etwas mit der Datei machen
}

// Datei-Auswahl
private String chooseFile() {
  String source = Config.getParameter("SourceDirectory");
  String temp = Config.getParameter("TempDirectory");
  
  // Algorithmus zur Dateiauswahl
  String filename = name; (der ist grade vom Himmel gefallen ;) )
  copyFile(filename);
  deleteFile(filename);
  filename = temp + "\\" + filename; (hier wird der Pfad der verschobenen Datei zusammengebaut)
  return filename;
}

Ich hoffe, jemand hat ein Stichwort (oder auch zwei oder drei) für mich.
Besten Dank
Maddy
 
B

Beni

Gast
Mit einem java.util.concurrent.Semaphore kann man Codeteile "abschliessen", mit dem Schlüsselwort "synchronized" kann man einzelne Objekte sperren (jeweils nur ein Thread kann dann auf die geschützten Teile zugreiffen).
 

Maddy

Mitglied
Ich hab mir mal synchronized angesehen, was dabei rauskam ist folgendes:

Code:
private synchronized File ermittleAeltesteDatei() {
		
			File[] files = new File(quellVerzeichnis).listFiles();
			long date = new Date().getTime();
			int index = -1;
			for (int i = 0; i < files.length; i++) {
				if (!files[i].isDirectory()) {
					long lm = files[i].lastModified();
					if (date > lm) {
						date = lm;
						index = i;
					}
				}
			}
			if (index > -1) {
				File oldestFile = files[index];
				System.out.println("gefundene Datei: "+oldestFile.getName());
				return oldestFile;
			} else {
				return null;
			}
		
	}

Wie kann ich testen, ob das jetzt so funktioniert wie ich mir das vorstelle? Ich bin leider mit mir allein, kann man mehrere Threads simulieren und dann checken, ob das alles funktioniert?

Gruss Maddy
 

The_S

Top Contributor
öhm

Code:
new Thread(new Runnable() {
   public void run() {
      ermittleAeltesteDatei();
      System.out.println("1. " + System.currentTimeMillis());
   }
}).start();
new Thread(new Runnable() {
   public void run() {
      ermittleAeltesteDatei();
      System.out.println("2. " + System.currentTimeMillis());
   }
}).start();
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
berserkerdq2 Habe ein svg bild, kann ich das zu svg koordinaten umrechnen, damit ich den Umriss zeichnen kann? Wenn ja wie? Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
I OpenPDF erzeugt riesige PDFs, wenn Grafiken über PdfGraphics2D#drawImage gezeichnet werden Allgemeine Java-Themen 1
Viper13125 Eclipse Hängt sich auf, wenn ich SimpelDateFormat drin lasse Allgemeine Java-Themen 2
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
M Probleme bei Eclipse wenn ich entpacke Allgemeine Java-Themen 15
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
P Summieren wenn Allgemeine Java-Themen 4
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
D Cursor unsichtbar, wenn Kontextmenü aufgerufen wird Allgemeine Java-Themen 5
E JavaFX RMI extrem langsam wenn Server nicht läuft Allgemeine Java-Themen 5
W Thread sleep 30 sekunden - wenn keine Antwort bis dahin neu senden Allgemeine Java-Themen 2
H Runtime reagiert erst wenn Programm abbricht Allgemeine Java-Themen 1
J Jasper ireport - wieso beendet die Anwendung wenn ich die Preview schließe Allgemeine Java-Themen 1
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
S Wenn mehr als die Hälfte Großgeschrieben ist. Allgemeine Java-Themen 2
D mouseWheelMoved => erst reagieren, wenn für 1s das Mausrad nicht mehr benutzt wurde Allgemeine Java-Themen 4
L SetBounds wird vor dem Konstruktorcode aufgerufen - Wenn Startleiste links Allgemeine Java-Themen 1
T MEthodenauruf testen, wenn instanz erst erzeugt wird Allgemeine Java-Themen 0
DStrohma Input/Output KeyEvent nur verarbeiten wenn es ein "sichtbares" Zeichen ist? Allgemeine Java-Themen 1
S ExecutorService.invokeAll -- was passiert wenn einige Tasks schon ausgefuehrt wurden? Allgemeine Java-Themen 2
M CapsLock abfragen wenn Fenster wieder aktiviert wird Allgemeine Java-Themen 5
D Java Skript Wenn Dann in PDF Formular Allgemeine Java-Themen 2
G Runtime.exec beendet Programm unter Linux, wenn Java Programm beendet wird Allgemeine Java-Themen 3
L Input/Output Dateien erstellen, wenn ein JAR ausgeführt wird Allgemeine Java-Themen 13
S Strings gehen "kaputt" wenn ich in CVS ein und wieder auschecke. Allgemeine Java-Themen 2
E externen Prozess schließen, wenn Programm geschlossen wird Allgemeine Java-Themen 2
D mvc-Modell: wenn views voneinander wissen sollen Allgemeine Java-Themen 13
B Berechnung eines sinh abbrechen, wenn 16. Nachkommastelle sich nicht mehr ändert Allgemeine Java-Themen 7
B Benachrichtigung, wenn sich Benutzer am Betriebssystem anmeldet Allgemeine Java-Themen 9
T Set.contains() auch false wenn value == null? Allgemeine Java-Themen 4
N OutOfMemory nur wenn -Xmx gesetzt ist?! Allgemeine Java-Themen 6
Y Erfassen der Gesamtbreite, wenn 2 Bildschirme zur Verfügung. Allgemeine Java-Themen 3
V Was tun, wenn close() fehlschlägt? Allgemeine Java-Themen 3
G Was ist Ant und warum soll ich das brachen, wenn es IDEs gib Allgemeine Java-Themen 10
J Probleme wenn man keine serialVersionUID definiert? Allgemeine Java-Themen 27
G Aufruf einer Methode wenn Klasse noch nicht existiert Allgemeine Java-Themen 3
K FarbeA die moeglichst sichtbar ist wenn gezeichnetauf FarbeB Allgemeine Java-Themen 7
G wenn Button geklickt -> regelmäßig Aktion ausführen Allgemeine Java-Themen 7
ARadauer mit keylistener hören auch wenn frame nicht den focus hat Allgemeine Java-Themen 2
S Zweiten Thread erst starten wenn erster Thread beendet ist ? Allgemeine Java-Themen 6
B Datei erst öffnen, wenn EOF gesetzt ? Allgemeine Java-Themen 4
M PostgreSQL - nennenswerte Vorteile und wenn ja, wo? Allgemeine Java-Themen 3
P JTextField textfarbe schwarz auch wenn JTF deaktiviert ist Allgemeine Java-Themen 4
C Wenn long int zu klein Allgemeine Java-Themen 17
F CPU auslastung wenn Speicher mit -Xmx erhöht Allgemeine Java-Themen 4
P Ist das möglich mit Java - wenn Nein wie sonst? Allgemeine Java-Themen 8
R Wenn Variable = wat ist Allgemeine Java-Themen 7
J RegEx: "wenn zeichen folgen ersetze x mit y, sonst mit Allgemeine Java-Themen 2
F Wenn ihr Performance wollt nehmt C++ Allgemeine Java-Themen 39
L Wenn String matches [-.,;:_°&] dann. Allgemeine Java-Themen 5
I JMF - feststellen wenn mp3 aus Allgemeine Java-Themen 10
G Prozess beenden, wenn er hängt Allgemeine Java-Themen 9
L JTable: Wenn Zeile markiert dann Meldung. geht nicht Allgemeine Java-Themen 4
G wenn ohne Interface Allgemeine Java-Themen 2
K Wenn events auftritt fireActionPerformed Allgemeine Java-Themen 6
T ^Wenn Java startet wird das Bild unscharf Allgemeine Java-Themen 8
G Wenn JAVA Applet nicht geladen werden kann -> Flash Allgemeine Java-Themen 4
B Rechner stürzt ab wenn Java-Anwendungen geöffnet werden! Allgemeine Java-Themen 2
N Wenn Bild nicht vorhanden, dann Weiterleitung Allgemeine Java-Themen 5
G Auf KeyEvent reagieren, wenn das Fenster nicht aktiv ist Allgemeine Java-Themen 8
S Java öffnet immer im editor Allgemeine Java-Themen 1
N Eingabe wird immer als "false" ausgegeben Allgemeine Java-Themen 6
kodela bestimmten Dateityp immer mit jar-Datei öffnen Allgemeine Java-Themen 17
C FileLock - Exception wird immer geworfen Allgemeine Java-Themen 4
W Haben Konstruktoren in Java eigentlich immer mindestens einen Parameter? Allgemeine Java-Themen 4
C Variablen == gibt immer false aus. Allgemeine Java-Themen 2
@SupressWarnings() Multilanguaging lädt immer falsch Allgemeine Java-Themen 5
A Swing Immer aktuelle Mausposition anzeigen lassen Allgemeine Java-Themen 7
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
T Textarea text wird immer überschrieben Allgemeine Java-Themen 4
J StringTokenizer - Trennzeichen nicht immer beachten Allgemeine Java-Themen 2
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
S Zahlen aus (String mit zahlen) immer wieder neu auslesen Allgemeine Java-Themen 5
I Java Applet wird immer blockiert Allgemeine Java-Themen 3
AssELAss Zeilenumbruch immer nach bestimmtem Zeichen Allgemeine Java-Themen 1
Y Prüfen ob ein Graph immer einen von mehren Enden erreicht Allgemeine Java-Themen 4
E Immer nur der Catch-Zweig Allgemeine Java-Themen 3
T Variablenübergabe liefert immer null Allgemeine Java-Themen 13
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
K Image beim catchen ist immer null Allgemeine Java-Themen 9
M Input/Output Datei erzeugen funktioniert nicht (immer) vom .jar aus Allgemeine Java-Themen 5
7 String in Int, immer ein Anführungszeichen Allgemeine Java-Themen 4
T Wie heißt ein Binärbaum, dessen Knoten immer zwei Kinder haben müssen? Allgemeine Java-Themen 2
D Webseite wird nicht immer komplett ausgelesen Allgemeine Java-Themen 11
2 Array immer die Mitte (Nicht trivial) Allgemeine Java-Themen 4
R JNI if abfrage gibt immer false zurück. Allgemeine Java-Themen 7
E rückgabewert ist immer null Allgemeine Java-Themen 2
H2SO3- bestimmte class immer mit 1.4 compilieren Allgemeine Java-Themen 5
S HashMap containsKey liefert immer false zurück Allgemeine Java-Themen 15
D Api mit eine Methode die "immer" läuft bis "stop" "gerufen wird. Allgemeine Java-Themen 25
VfL_Freak ServerSocket wirft nicht immer eine BindException Allgemeine Java-Themen 21
J Comparable aber nicht immer Allgemeine Java-Themen 15
D KeyEvents immer fangen Allgemeine Java-Themen 5
data89 A-Stern: fährt immer wieder vor die Wand! - Hilfeeee Allgemeine Java-Themen 7
L Applet immer wieder neu laden - Problem Allgemeine Java-Themen 25

Ähnliche Java Themen

Neue Themen


Oben