2014-10-14 3 views
0

У меня есть сервер HTTP, который собирается быть очень занят, есть несколько HttpHandlers внутри которой все они начинают свою работу с новым Thread(), так как я до сих пор не могу compeletely понять Использование ThreadPoolExecutor (Когда вы должны использовать, когда вам не нужно), я действительно мог бы использовать небольшой совет об этом, и мне нужно его использовать?Когда использовать ThreadPoolExecutor вместо NewThread()

Плюс есть ли крыша для threadPoolExecutor's max Threads?

То же самое касается android, я не понимаю, почему я должен использовать ThreadPoolExecutor вместо этого просто используйте newThread()?

ответ

0

В основном ThreadPoolExecutor только высокий уровень API из Java, чтобы сделать задачу многократной нити без решения с низким API уровня (Создание резьбы вручную)

Для небольшого например ExecutorService executor = Executors.newFixedThreadPool(5); будет запускать задачи вы отправляете в 8 потоках ,

Вы можете попытаться это понять, прочитав эту документацию.

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html
и этот учебник
http://tutorials.jenkov.com/java-util-concurrent/threadpoolexecutor.html

+0

и насколько я знаю, средний пул потоков для андроидов равен 5 прав? и в этих 8 нитях вы сказали, что отдых будет просто ждать или отбрасываться? plus keepaliveTime означает время, в течение которого Executor ждет, прежде чем сбросить простаивающий поток? поэтому для сети это должно быть около 30 секунд правильно? – Reza

+0

Да, сожалею об этом, я думал, что вы спрашиваете на Java. Для keepAliveTime здесь есть очень хорошее объяснение -> http://stackoverflow.com/questions/10379314/how-does-keep-alive-work-with-threadpoolexecutor, возможно, он может вам помочь :) –

+0

спасибо alot mate – Reza

0

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

+0

спасибо большое , abit более ясно – Reza

0

Создание и уничтожение потоков имеет высокую загрузку процессора, поэтому, когда вам нужно выполнять много небольших простые задачи одновременно накладные расходы создавать свои собственные темы, могут занять значительную часть процессора циклов и серьезно влияют на окончательное время отклика. Это особенно актуально в условиях напряжений, когда выполнение нескольких потоков может привести к 0% CPU до 100%, и большая часть времени будет потрачена впустую при переключении контекста (обмен потоками в процессоре и его память ).

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