Мне интересно, если это лучший способ сделать это. У меня около 500 потоков, которые работают бесконечно, но Thread.sleep на минуту, когда выполняется один цикл обработки.
ExecutorService es = Executors.newFixedThreadPool(list.size()+1);
for (int i = 0; i < list.size(); i++) {
es.execute(coreAppVector.elementAt(i)); //coreAppVector is a vector of extends thread objects
}
Код, который выполняется, действительно прост и в основном это
class aThread extends Thread {
public void run(){
while(true){
Thread.sleep(ONE_MINUTE);
//Lots of computation every minute
}
}
}
Мне нужны отдельные потоки для каждой выполняемой задачи, поэтому изменение архитектуры не вариант. Я попытался сделать мой размер ThreadPool равным Runtime.getRuntime (). AvailableProcessors (), который пытался запустить все 500 потоков, но только 8 (4xhyperthreading) из них выполнялись. Другие потоки не сдались бы и позволили другим потокам иметь свою очередь. Я попытался положить в wait () и notify (), но все равно не повезло. Если у кого-то есть простой пример или несколько советов, буду благодарен!
Ну, дизайн, возможно, имеет недостатки. Потоки реализуют Genetic-Programming или GP, тип алгоритма обучения. Каждый поток анализирует передовые тенденции, делает прогнозы. Если поток когда-либо завершается, обучение теряется. Тем не менее, я надеялся, что sleep () позволит мне поделиться некоторыми ресурсами, пока один поток не "изучает"
Таким образом, фактические требования
как я могу планировать задачи, которые поддерживают
состояние и запуск каждые 2 минуты, но
контролировать, сколько выполнить одновременно.