Hi zusammen,
ich habe eine Frage wie ich folgende Punkte bei mir korrekt implementieren soll:
Ich habe einen ThreadPool, bei dem ich einen minCount und maxCount (minimale/maximale Anzahl Threads) angeben kann.
1. Initialiserung:
Wie soll der Pool initialisiert werden? Soll ich im Konstruktor direkt die minimale Anzahl an Thread initialisieren? Oder warte ich bis die Anfragen kommen.
2. Threads aufräumen:
Jeder Worker-Thread in meinem Thread-Pool kann ausgeliehen werden und wird dann als used markiert.
Mein Thread-Pool hat nun einen CleanerThread, welcher zyklisch die Liste aller vorhandenen Threads prüft.
Hier prüfe ich:
- Ist thread noch ok? falls nein dann lösche Thread
- Ist thread noch ausgeliehen und ist ein Timeout aufgetreten? falls ja dann lösche Thread
Danach habe ich meine Liste "aufgeräumt" und enthält nur noch funktionierende Worker-Threads.
Was mache ich jetzt? Soll ich wieder soviele Worker-Threads initialiieren bis die minimale Anzahl an Threads erricht ist?
hier mal meine Aufräum-Methode welche in einem separatem CleanerThread abläuft:
ich habe eine Frage wie ich folgende Punkte bei mir korrekt implementieren soll:
Ich habe einen ThreadPool, bei dem ich einen minCount und maxCount (minimale/maximale Anzahl Threads) angeben kann.
1. Initialiserung:
Wie soll der Pool initialisiert werden? Soll ich im Konstruktor direkt die minimale Anzahl an Thread initialisieren? Oder warte ich bis die Anfragen kommen.
2. Threads aufräumen:
Jeder Worker-Thread in meinem Thread-Pool kann ausgeliehen werden und wird dann als used markiert.
Mein Thread-Pool hat nun einen CleanerThread, welcher zyklisch die Liste aller vorhandenen Threads prüft.
Hier prüfe ich:
- Ist thread noch ok? falls nein dann lösche Thread
- Ist thread noch ausgeliehen und ist ein Timeout aufgetreten? falls ja dann lösche Thread
Danach habe ich meine Liste "aufgeräumt" und enthält nur noch funktionierende Worker-Threads.
Was mache ich jetzt? Soll ich wieder soviele Worker-Threads initialiieren bis die minimale Anzahl an Threads erricht ist?
hier mal meine Aufräum-Methode welche in einem separatem CleanerThread abläuft:
Java:
private Vector<WorkerThread> workerThreads;
private synchronized void cleanupConnections() {
if (cleanupThread.isClosing()) {
return;
}
long lTimeOut = System.currentTimeMillis() - UNUSED_TIMEOUT;
Enumeration<WorkerThread> availableThreads= workerThreads.elements();
while ((availableThreads!= null) && (availableThreads.hasMoreElements())) {
WorkerThread oneWorkerThread= (WorkerThread) availableThreads.nextElement();
// lösche alle threads bei denen es einen Fehler gab
if ((oneWorkerThread.isError())) {
workerThreads.remove(oneWorkerThread);
continue;
}
// lösche alle threads bei denen es einen Timout gab
if ((workerThreads.inUse()) && (lTimeOut > workerThreads.getLastUse())) {
workerThreads.remove(oneWorkerThread);
continue;
}
}
// ab hier könnte die Liste der vorhanden WorkerThreads leer sein. Soll ich jetzt die minimale Anzahl an Threads initialisieren?
}
Zuletzt bearbeitet: