Мое приложение имеет несколько потоков. В случае, если сервер выйдет из строя или перезапустится, я хочу выполнить ТОЛЬКО те потоки, которые не были выполнены. Например, в приведенном ниже фрагменте: подумайте, отключается ли сервер после выполнения потоков с номерами 1,4,2. Приложение должно выполнять 2, 3 и 5 потоков после перезапуска сервера.
Задача потоков АТОМИЧЕСКАЯ по своей природе. Либо все делается, либо ничего не происходит. Поэтому мне нужно как-то сохранить состояние каждого уже выполненного потока. Как я могу это сделать?
class HugeJob implements Runnable {
int param;
public HugeJob(int var) {
this.param = var;
}
public void run() {
//This is an ATOMIC task i.e. either all gets done or nothing
//Each thread task takes ~20 minute. Heavy I/O and network operations
//I have to make sure no thread executes more than once even if server is restarted
System.out.println(this.param);
}
}
public class ThreadSample {
public static void main(String [] args)
{
for(int i =0; i<5;i++)
{
HugeJob obj = new HugeJob(i);
new Thread(obj).start();
}
}
}
Спасибо за помощь.
Изменить Могу ли я использовать Quartz для достижения этой цели? Стоит ли создавать каждый поток как отдельное задание и сохранять его с помощью Quartz? Вот связанная ссылка: Сохранение задания JavaQuartz