2015-08-03 3 views
1

У меня есть 3 java-программы в пакете, каждый из которых имеет свой собственный основной метод (Test1.java, Test2.java, Test3.java). Я хочу запускать эти 3 программы одновременно из другой java-программы, так что Test1 java должен запускаться каждые 60 секунд, Test2.java должен запускаться каждые 10 минут, а Test3.java должен запускаться каждые 30 минут. Как я могу это достичь? Любые решения? Здесь мне поможет многопоточность java, но я не уверен, как мне управлять временем этих программ, как упомянуто выше.Как запустить 3 разных Java-программы одновременно

+0

Бесконечный цикл в a Thread и разрешить Thread [sleep] (https://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html) – SomeJavaGuy

+0

Посмотрите на Java concur и ExecutorService. Никто больше не должен создавать сырые потоки. – duffymo

+1

Вам нужно запустить свои программы прямо из Java? Вы можете использовать Crontab (на linux) для выполнения подобных задач, не требуя программирования Java. Помимо ExecutorService, Quartz является хорошей библиотекой java для планирования работы (хотя ее мощность имеет несколько более сложное применение, чем чистый ExecutorService). – GPI

ответ

1

Вы можете использовать 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); 

Вы можете сделать то же самое для двух других задач!

+0

Если некоторые задачи будут выполняться каждые 10 и 30 минут, тогда одного потока может быть недостаточно. Вероятно, вы должны изменить 'newSingleThreadScheduledExecutor' на нечто вроде' newScheduledThreadPool (3); '. – Pshemo

+0

Спасибо Pshemo. Да ты прав. Я использую newScheduledThreadPool (3), чтобы сделать это сейчас. – Vikram

1

Один из вариантов: 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); 

При каждой задаче вы можете просто вызвать основной метод других классов.

0

Вы можете использовать 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 
Смежные вопросы