Как запустить потоки 1K и непрерывно запускать потоки для одной и той же задачи после их завершения - PullRequest
0 голосов
/ 30 декабря 2011

Если я создаю потоки 1 КБ и одновременно запускаю их с помощью защелки, после завершения потоков мой процесс заканчивается.

Что я хочу сделать, так это, когда поток заканчивается, запустить другой поток для выполнения той же задачи (или каким-то образом заставить тот же поток продолжить обработку с той же задачей снова).

Сценарий:

Я хочу запустить потоки размером 1 КБ и не хочу снижения производительности при запуске других потоков размером 1 КБ, когда они завершат обработку.

Потоки просто устанавливают соединение http URL с URL http://www.example.com/some/page

То, что я хочу сделать, это непрерывно работать в течение x секунд и всегда запускать потоки 1K.

Я не хочу использовать executor для этого как для обучения тому, как это сделать без него, и я верю, что поскольку среда executor разделяет задачу и потоки, она не гарантирует, сколько потоков запущено в в то же время.

Ответы [ 3 ]

2 голосов
/ 30 декабря 2011

Вам придется сделать это в самом Runnable. Создайте простой цикл, окружающий ваши действия. Если вы хотите, чтобы все они синхронизировались в определенный момент, создайте CountdownLatch со счетчиком 1000 и в конце каждой итерации выполните countDown и ожидайте.

Apache JMeter - это бесплатный инструмент для тестирования производительности, который вы можете легко настроить для тестирования URL-адресов в нескольких потоках. Он также может распространять тесты, например 10 клиентов делают 100 потоков вместо.

1 голос
/ 30 декабря 2011

Близко, насколько я могу судить, вы хотите иметь большое количество серверных потоков и заставить их выполнять часть работы из списка, затем возвращаться и ждать, пока будет задана другая часть работы (или работать над еще один уже присутствующий кусок в списке).

Это то, для чего вы используете очередь. Вероятно, BlockingQueue - это самая простая форма для использования, которая будет соответствовать вашим целям, и в JDK есть несколько реализаций этого.

1 голос
/ 30 декабря 2011

используйте цикл в вашем run() методе.

...