Sto usando ScheduledExecutorService e, dopo aver chiamato il metodo shutdown, non riesco a pianificare un Runnable su di esso. Chiamando il numero scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)
dopo il shutdown()
si lancia java.util.concurrent.RejectedExecutionException. C'è un altro modo per eseguire una nuova attività dopo che shutdown()
viene chiamato su ScheduledExecutorService?ScheduledExecutorService start stop più volte
risposta
È possibile riutilizzare lo scheduler, ma non arrestarlo. Piuttosto, annulla il thread in esecuzione che puoi ottenere quando invochi il metodo scheduleAtFixedRate. Es:
//get reference to the future
Future<?> future = service.scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)
//cancel instead of shutdown
future.cancel(true);
//schedule again (reuse)
future = service.scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)
//shutdown when you don't need to reuse the service anymore
service.shutdown()
Sono stato in grado di chiudere e creare nuovi servizi in un ambiente Spring, ma i bean mi stavano dando dolore. Questo ha fatto il trucco, grazie! –
@Alex Il primo oggetto futuro non verrà rilasciato fino a quando il servizio non verrà arrestato. Sarà una perdita di memoria quando il servizio durerà a lungo e programmerà molte volte. Se è vero, c'è un modo per evitare perdite di memoria? – Nickolas
Ho sbagliato, il futureTask annullato non verrà aggiunto a workQueue, quindi verrà rilasciato da GC. – Nickolas
Le javadocs di shutdown()
dicono:
Initiates an orderly shutdown in which previously submitted tasks are executed,
but no new tasks will be accepted.
Quindi, non si può chiamare shutdow()
e quindi pianificare nuovi compiti.
Qualche suggerimento su come riprogrammare le nuove attività dopo l'arresto? – walters
Creare un nuovo ScheduledExecutorService o non arrestare quello esistente. C'è un motivo per cui lo stai chiudendo? –
Non è possibile fare in modo che l'esecutore accetti nuove attività dopo averlo spento. La domanda più pertinente è il motivo per cui è necessario spegnerlo in primo luogo? Gli esecutori creati devono essere riutilizzati per tutta la durata della tua applicazione o sottosistema.
- 1. Start service after force stop
- 2. start-stop-daemon e pitone
- 3. start-stop-daemon e programma java
- 4. shell start/stop per script python
- 5. Start/Stop Servizio presso il Widget
- 6. "start-stop-daemon: impossibile fare stat"
- 7. Cosa fa 'adb shell start/stop' fare?
- 8. stop/start/pause in animazione python matplotlib
- 9. Node js start e stop windows services
- 10. Start/Stop DispatcherTimer da un thread diverso
- 11. Start stop Servizio dall'app modulo C#
- 12. argomenti citati start-stop-daemon erroneamente interpretati
- 13. Successo con start-stop-daemon e mono-service2?
- 14. Come posso Stop/Start/Pausa una @JmsListener (il modo pulito)
- 15. Android: il servizio Stop/Start dipende dallo stato WiFi?
- 16. Debian start-stop-daemon. Java iniziare vaso File
- 17. Qual è la differenza tra servizio tomcat start/stop e ./catalina.sh run/stop
- 18. Media Player start start start
- 19. Dropwizard ScheduledExecutorService
- 20. Creazione di un timer con ScheduledExecutorService
- 21. ScheduledExecutorService con ritardo variabile
- 22. Come fermare un ScheduledExecutorService?
- 23. Android JobScheduler esecuzione più volte
- 24. God stop resque workers rastrello
- 25. .NET Start Process con diritti più elevati
- 26. Stop a thread Python
- 27. Incolla più volte
- 28. Nuovo thread più volte
- 29. socket.io emette più volte
- 30. NSNotificationCenter chiama più volte
Questo è il comportamento previsto. Potresti spiegare cosa stai cercando di fare e perché vuoi eseguire un altro eseguibile dopo l'arresto? – Jeremy