У меня есть 3 java-программы в пакете, каждый из которых имеет свой собственный основной метод (Test1.java, Test2.java, Test3.java). Я хочу запускать эти 3 программы одновременно из другой java-программы, так что Test1 java должен запускаться каждые 60 секунд, Test2.java должен запускаться каждые 10 минут, а Test3.java должен запускаться каждые 30 минут. Как я могу это достичь? Любые решения? Здесь мне поможет многопоточность java, но я не уверен, как мне управлять временем этих программ, как упомянуто выше.Как запустить 3 разных Java-программы одновременно
ответ
Вы можете использовать ScheduledExecutorService
An ExecutorService, который может планировать команды для запуска после заданного задержки или периодически выполнять.
После Exampl поможет вам
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
Runnable task = new Runnable() {
public void run() {
// Do your first concurrent work here
}
};
executorService.scheduleAtFixedRate(task, 0, 10, TimeUnit.SECONDS);
Вы можете сделать то же самое для двух других задач!
Если некоторые задачи будут выполняться каждые 10 и 30 минут, тогда одного потока может быть недостаточно. Вероятно, вы должны изменить 'newSingleThreadScheduledExecutor' на нечто вроде' newScheduledThreadPool (3); '. – Pshemo
Спасибо Pshemo. Да ты прав. Я использую newScheduledThreadPool (3), чтобы сделать это сейчас. – Vikram
Один из вариантов: java.util.Timer
, который может планировать выполнение некоторых задач.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("task1");
}
}, 0, 1000);
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("task2");
}
}, 0, 2000);
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("task3");
}
}, 0, 3000);
При каждой задаче вы можете просто вызвать основной метод других классов.
Вы можете использовать Quartz Scheduler:
Если вы хотите запустить банки непосредственно check here
Если вы хотите запустить методы или классы check here
Узоры вам нужно:
0 * * * * ? // run each 60 seconds
0 0/10 0 * * ? // run each 10 minutes
0 0/30 0 * * ? // run each 30 minutes
- 1. как запустить 2 разных процесса одновременно?
- 2. Запустить 2 разных приложения одновременно (appcelerator)
- 3. как запустить более одного теста селена в разных браузерах одновременно
- 4. Как запустить 2 Tomcat Servers одновременно Правильно из разных каталогов?
- 5. Как я могу запустить два разных основных класса одновременно?
- 6. Как запустить действие на разных CCDrawNodes одновременно в cocos2d-x?
- 7. запустить несколько команд одновременно
- 8. Jenkins - Как выполнить задание трижды 3 задания на 3 разных узла одновременно
- 9. Как запустить 2 функции одновременно?
- 10. Как запустить несколько WebClients одновременно?
- 11. Как запустить несколько «задач» одновременно?
- 12. Как запустить 2 функции одновременно?
- 13. Можно ли одновременно запускать 3 строки кода?
- 14. Как запустить две анимации jQuery одновременно?
- 15. Как я могу запустить две петли одновременно?
- 16. Запуск SVN разных версий одновременно
- 17. Как сделать 3 снимка одновременно?
- 18. Makefile - Как запустить одновременно клиентов после сервера?
- 19. PHP запустить скрипт одновременно?
- 20. Как вызвать несколько разных методов одновременно
- 21. Отображение 3 изображений одновременно
- 22. .htaccess 3 разных домена, 3 разных 301
- 23. Я пытаюсь запустить 3 .cmd-файлы из 3 разных местоположений за один раз
- 24. Как сделать два разных таймера NS одновременно?
- 25. Чтение двух разных файлов одновременно
- 26. Update 2 разных коллекций одновременно
- 27. одновременно отображает два разных видеопотока
- 28. Как запустить два потока в Ruby одновременно?
- 29. Как запустить несколько сценариев Powershell одновременно?
- 30. Как мы можем запустить две анимации одновременно?
Бесконечный цикл в a Thread и разрешить Thread [sleep] (https://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html) – SomeJavaGuy
Посмотрите на Java concur и ExecutorService. Никто больше не должен создавать сырые потоки. – duffymo
Вам нужно запустить свои программы прямо из Java? Вы можете использовать Crontab (на linux) для выполнения подобных задач, не требуя программирования Java. Помимо ExecutorService, Quartz является хорошей библиотекой java для планирования работы (хотя ее мощность имеет несколько более сложное применение, чем чистый ExecutorService). – GPI