многопоточность Java - PullRequest
       29

многопоточность Java

1 голос
/ 01 марта 2012

У меня есть приложение, которое развернуто в tomcat 6В этом приложении я создал thread class, который выбирает 1000 записей из таблицы, обрабатывает их и сохраняет в 4 разных таблицах в DataBase.Я запускаю два threads одновременно, чтобы защитить процесс от deadlock.Есть ли способ schedule these threads соответственно моему cpu utilization.то есть.Если процессоров не осталось, то новый поток не будет создан.

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Если я правильно понял вашу проблему, я думаю, что этот случай рассматривается во 2-й редакции «Эффективной Java» Джошуа Блоха:

Если сервер загружен настолько сильно, что все его процессоры полностью загруженыиспользуется, и приходит больше задач, будет создано больше потоков, что только усугубит ситуацию.Поэтому на сильно загруженном рабочем сервере вам гораздо лучше использовать Executors.newFixedThreadPool, который дает вам пул с фиксированным числом потоков, либо напрямую использовать класс ThreadPoolExecutor для максимального контроля.

Хотя я еще не пробовал, использование Executors кажется хорошей идеей.

0 голосов
/ 01 марта 2012

Нет способа обнаружить загрузку процессора с помощью чистого кода Java. но вы можете позвонить Runtime.getRuntime (). Exec ( "верхний") затем проанализируйте результат inputStream, чтобы найти загрузку процессора. если он перегружен, не начинайте новую тему.

...