Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > массив из потоков


Автор: sergioK 1.11.2009, 02:00
cоздаю потоки в цикле 

Код

public static void main(String[] args) throws MalformedURLException, IOException, InterruptedException {
String[] list={"spy","qqqq","aig" ,"aa","brcm","aapl" ,"rimm","apol","abt" ,"pot","acs","agn" ,"edu","ero","jdk",
                  "rsw","ry" ,"xom","BAX","ebay","xle","hpq","c","sun","f","fnm"} ;     
        StockData stockData;
     for(String share:list){
         stockData = new StockData(share);
         stockData.start();        
           }    
    }


где StockData - extends Thread
как мне померить время работы самого цикла ? т,е другими 
дождаться когда все потоки будут завершены , но нельзя пользовать join т,к следующий поток не должен ждать пока предыдущий завершиться , 

Автор: goodday1941 1.11.2009, 02:21
ну повесить измерения длительности на выполнения самого треда StockData, ну и далее самый длинный и будет нужным Вам временем

Автор: sergioK 1.11.2009, 11:57
Цитата(goodday1941 @ 1.11.2009,  02:21)
ну повесить измерения длительности на выполнения самого треда StockData, ну и далее самый длинный и будет нужным Вам временем

решил при помощи статик переменных, теперь вопрос в другом, программа должна запускать до 10000 средов, это максимально ,
реально от 50 до 100, компьютер не грохнеться ? если писать на С это  так-то решит проблему ?

Автор: goodday1941 1.11.2009, 13:03
че ему грохаться то ) главно что бы ресурсов хватило

а вообще к чему такое колличество тредов?
может лучше ограничить к примеру сотней, а остальных в очередь слать?

Автор: sergioK 1.11.2009, 13:48
Цитата(goodday1941 @ 1.11.2009,  13:03)
че ему грохаться то ) главно что бы ресурсов хватило

а вообще к чему такое колличество тредов?
может лучше ограничить к примеру сотней, а остальных в очередь слать?

вот я и спрашиваю ресурсов хватит ?

кол-во средов - требование задачи , 
юзер на экране выбирает симбол по нему строиться URL из которого беруться данные,
потом он может выбрать еще один символ- стоиться новый URL , 
и так он может выбрать до 10000 симболов , теорититески,
больше 50 он физически не сможет просмотреть глазами,
если я открою  скажем 10 нитей ,то будут приходить лишние данные и это замедлит выдачу нужных, а 
условием задачи является показ данных в реальном времени , т,е задержка в 0,5 секунды критична ,
при это сами данные все время меняються , 
у меня PC а не 12процесорный MF за 700кило баксов  smile 
какие варианты ? 

Автор: Skynin 1.11.2009, 14:10
Цитата

кол-во тредов - требование задачи 

Ни одна задача задача не требует количества тредов.

Потоки - это способ реализации задачи, а не - требование. Как говорил А. Кокс - "Многопоточное программирование предназначено для тех кто не умеет программировать конечные автоматы"

10000 для озвученной задачи - явно неверный путь проектирования, тем более что уже указано: "теоретически,
больше 50 он физически" и "задержка в 0,5 секунды критична". 
За какое время работы программы может появится 10000 потоков?
И сколько в действительности будет потоков одновременно?
Какое время на переключение между потоками будет расходоваться при 10 тысячах потоков?

Пример: To summarize, all the servlet containers did well up to about 4000 connections - http://www.javalobby.org/java/forums/t92965.html

Обращение к большому числу внешних соединений лучше делать с помощью неблокирующих функций java.nio.
http://mina.apache.org/

Цитата

какие варианты ? 

Перепроектировать, если действительно одновременно будут работать 10 тыс потоков.
Оставить как есть, если пользователь не в состоянии в секунду набирать 10 тыс символов.

P.S.
Цитата

вот я и спрашиваю ресурсов хватит ?

Сколько одновременных соединений эффективно поддерживает конкретная ОСь?
Утрировано - толку от 10 тыс потоков, если это Windows XP c непропатченным TCP.SYS где зашито 10 half-коннектов. 9990 потоков все равно будут стоять и ждать когда ОСь даст возможность JVM открыть новое TCP соединение. 

Ресурсов то наверное хватит, а вот как оно будет работать... могут и секунды уходить на ожидание результатов работы конкретного потока.

Автор: sergioK 1.11.2009, 16:27
Цитата(Skynin @ 1.11.2009,  14:10)
]

Обращение к большому числу внешних соединений лучше делать с помощью неблокирующих функций java.nio.
http://mina.apache.org/

Как его подключать ? скачал , добавил жары в Эклипсе , он их не видит, 
на сайте они говорят Verify the integrity of the files 
не помимаю что с этим делать ? 


Автор: ivanovpv 2.11.2009, 10:34
Цитата(sergioK @  1.11.2009,  02:00 Найти цитируемый пост)
cоздаю потоки в цикле 


Есть такая штука называется ThreadGroup - группа/массив потоков, в классе есть средства группового управления.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)