Ich bin vertraut mit der traditionellen Thread-Implementierung, aber nicht so sicher über Executorservice. Ich weiß, dass es sehr praktisch ist, wenn man Threads mit dem Executor-Service behandelt. Aber ich bin etwas verwirrt über die Implementierung.Wie funktioniert der Executorservice in Java?
Nehmen wir an, ich habe einen übergeordneten Thread/Hauptthread und einen Executor-Service, der max Thread-Poolgröße 10 hat. Jetzt möchte ich eine bestimmte Aufgabe auf einer JMS-Warteschlange nur ausführen, wenn ihre Größe weniger als 1000 ist Ich kann wahrscheinlich denken, dies auf zwei Arten zu implementieren.
Fall 1:
class MyThreadClass inmplements Runnable {
public static void main(String args[]){
while(true){
int checkQueueSize = jmsQueue.getSize();
while(checkQueueSize<1000){
threadPoolTaskExecutor.execute(this);
++checkQueueSize;
}
}
}
public void run(){
jmsQueue.pushMessage("Hello Thread");
}
}
Fall 2:
class MyThreadClass inmplements Runnable {
public static void main(String args[]){
threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
threadPoolTaskExecutor.execute(this);
}
public void run(){
while(true){
int checkQueueSize = jmsQueue.getSize();
while(checkQueueSize<1000){
jmsQueue.pushMessage("Hello Thread");
++checkQueueSize;
}
}
}
}
Mein Verständnis ist Fall 2 wird nicht mehr als ein Thread überspannen. Bin ich richtig oder nicht? Oder gibt es eine andere Möglichkeit, die Aufgabe auszuführen?
'setWaitForTasksToCompleteOnShutdown' Teil des Federrahmen ist - fragen Sie in diesem Zusammenhang? – assylias
Ja. Aber wenn es anders geht, ist es sehr willkommen. – Satyaprakash
Ihre Anweisung 'while (checkQueueSize <= 1000)' wird immer dann endlos durchlaufen, wenn die lokale Variable 'checkQueueSize' kleiner als oder gleich 1000 ist. Nichts in der Schleife kann den Wert der Variablen ändern. –