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
Ich hoffe, jemand hat ein Stichwort (oder auch zwei oder drei) für mich.
Besten Dank
Maddy
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