2013-06-17 3 views
4

Есть ли способ увеличить производительность метода Thread.start. поскольку я знаю, что Thread.start вызовет метод прогона протектора в отдельном потоке, но я обнаружил, что ему нужно больше времени, чем просто вызов метода в вызывающем контексте.увеличить Производительность начала потока в java

+0

Уменьшения размера стека потока может дать некоторое небольшое улучшение ... – Affe

+0

Сделать Thread.start ненужного либо с использованием пула потоков, как это было предложено @pamphet и т.д., или сигнализируя выделенный поток, который запускает цикл вокруг некоторого wait(), например. Очередь P-C. –

+0

поблагодарить всех пул потоков улучшил производительность 7x –

ответ

2

Thread.start является родным. Это намного больше, чем вызов run - он использует вызовы операционной системы для создания стека потоков и множества других вещей. Рассмотрите возможность использования Thread Pool.

2

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

Есть различные варианты:

  • Сохраненная бассейн Thread - кэширует некоторые темы для повышения производительности

  • один пул Thread исполнителя - Один поток исполнителя

  • Fixed Thread Pool исполнителя - Исполнитель с фиксированным размером

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

Преимущество исполнителей над Thread.start():

  • использование Re существующих потоков, поэтому потоки не создаются каждый раз, когда задача представленного
  • управление
  • Thread осуществляется исполнителями создания
+0

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html –

2

Thread всегда требуется время. Традиционный подход

new Thread(runnableObj).start(); 

создает новую темы каждый раз мы называем старта() метода.

Используйте Исполнители, если вы не хотите тратить дополнительное время на создание потоков во время выполнения вашей бизнес-логики. Вы можете настроить и создать пулы потоков при запуске приложения.

Here хороший краткий учебник для Executors

Смежные вопросы