D
Mhh... aber wird der Thread nicht beim beenden des Servlets (also beim wechseln der WebSeite oder schliessen des Browsers) ebenfalls beendet ??
Das sollte nicht passieren. Das Servlet selbst wird ja auch nicht in einem eigenen Prozess gestartet, sondern ebenfalls in einem Thread ausgeführt.
zu 2. mhhh.. ich hatte geplant die downzuloadenen Urls innem Vector zu speichern und diesen nacheienander abzuarbeiten so das nicht mehr als z.B. 3 Files gleichzeitig geladen werden wegen der Bandbreite
Das sollte ja eigentlich egal sein, weil es keine Rolle spielt, ob denn nun 3 Fiels gleichzeitig oder nacheinander geladen werden. (u.U ist es sogar besser, wenn sie gleichzeitig geladen werden, weil ein Server es u.U nicht so schnell liefern kann, wie du runterladen könntest - dann wäre in der Zwischenzeit die Leitung nicht ausgenutzt)
Wenn du es dennoch so haben willst, dann ist das natürlich auch kein Problem. Mach einfach einen zentralen Thread, der einen Queue hat und diese dann abarbeitet:
[...]
//In deinem Servlet hälst du eine statische Variable
private static QueueThread queue = new QueueThread();
[...]
//Hier kommt die Download-Anforderung
queue.add(myFileToDownload);
//Hier kann das Servlet ganz normal weitermachen.
[...]
class DownloadQueue
implements Runnable {
private static java.util.LinkedList queue = new java.util.LinkedList();
public static void add(String file)
{
queue.add(file);
//Wenn der Thread noch nicht/nichtmehr läuft
if (queue.size() == 1) {
//Thread neu starten
Thread th = new Thread((Runnable)DownloadQueue.class);
th.start();
}
}
public void run()
{
//Hier immer das erste File der Liste runterladen und dann rauslöschen,
//solange bis keine Einträge mehr in der Liste sind.
}
}
//alles ungetestet
Diese Vorgehensweise bietet auch den Vorteil, dass du so z.B.: noch nicht laufene Downloads über das Web abbrechen könntest oder so.