В настоящее время я пытаюсь использовать многопоточную предыдущую мою программу. Вот приведенный ниже код:Функция Runnable run() немедленно прекращается
public class DipoleTester {
public static String DIR = "/home/";
public static void main(String[] args) throws InterruptedException {
Dipole trial;
ExecutorService service =
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
for (int r = 10; r < 150; r += 1) {
double radius = (double) r/10000.0;
for (int matType = 0; matType < 3; matType++) {
String name = matType + "_rad" + radius;
trial = new DipoleSimple(DIR, name);
trial.materialType = matType;
trial.RADIUS = radius;
service.submit(trial);
}
}
service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.HOURS);
}
}
Это довольно простая программа. run() - довольно простой базовый метод, который раньше использовался как метод main(). В среднем для оценки требуется около 3 минут. Проблема в том, что здесь кажется, что он просто выполняет асинхронный вызов для выполнения(), потому что он мгновенно оценивает весь поток.
i.e. Я ожидаю, что он запустит сканирование 8 потоков параллельно через 3-5 минут. Но вместо этого он запускает каждый и говорит, что он завершен практически мгновенно и загружает следующий поток в threadpool. Поэтому у меня осталось несколько сотен потоков, которые все пытаются запустить одновременно.
Любая идея, что происходит?
Я думаю, что это поможет наблюдать за поведением нити с помощью какого-то инструмента, такого как JVisualVM. Может быть, свалка? и, вероятно, было бы полезно увидеть метод run(). – jambriz
Вы попробовали представить манекен вместо этого? Просто с Thread.sleep (когда-нибудь) в нем? – Fildor
Итак, ваш метод 'DipoleSimple.run()' занимает 3 минуты для оценки? Вы уверены, что что-то еще не происходит, потому что код выглядит хорошо. Можете ли вы опубликовать образец класса DipoleSimple? – Gray