Je viens de découvrir l'Executor de Java et je me demande si cela correspond à mes besoins. J'ai une base de données, à laquelle des tâches sont constamment ajoutées.Comment utiliser Executor quand il y a des milliers/nombre dynamique de tâches?
I SQL SELECT toutes les lignes (tâches) de la base de données. À tout moment, il pourrait y avoir 100 000, 200, 3 ou 0 d'entre eux.
Je vois tous les exemples sont comme ceci:
ExecutorService taskExecutor = Executors.newFixedThreadPool(50); while(...) { taskExecutor.execute(new MyTask()); }
Comment pourrait-il être ajusté à mon scénario? Je ne peux pas simplement instancier 100000 de MyTask, ça va gâcher une tonne de mémoire.
Comment dois-je attendre pour terminer et vérifier à nouveau? Je ne peux pas attendre que 100 000 tâches soient terminées, parce que la première peut finir en 5 secondes et rester inutilisée pendant une longue période jusqu'à ce que la dernière soit finie, donc nous allons perdre du temps.
Pourquoi interrogez-vous toutes les tâches de la base de données en même temps? Au lieu de cela, vous devriez juste interroger autant de tâches que vous avez la capacité de travailler (ce qui peut être seulement une) et ensuite interroger à nouveau une fois le travail terminé et vous avez plus de capacité. –