Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
1 / 1 / 1
Регистрация: 05.04.2013
Сообщений: 225

Многопоточность

29.03.2014, 17:59. Показов 3319. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Тяжелая однако для меня тема многопоточности. Столкнулся вот с такой вот задачей, над которой уже несколько дней "бодаюсь". Помогите пожалуйста разобраться:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ExecutorService executor= Executors.newFixedThreadPool(SIZE_POOL);
        
        for (int i=0; i<favorite.length; i++)
        {   
            Task_Get.favorite=favorite[i];
            Runnable task=new Task_Get();
            //task.run(); 
            executor.execute(task);
            all_favorite.put(favorite[i], Task_Get.address);
            Task_Get.address.clear();
        }
        executor.shutdown();
        try {
            executor.awaitTermination(10, TimeUnit.SECONDS);
            printerFile(all_favorite);
            }
        catch (IOException e) {
            e.printStackTrace();
            } 
        catch (InterruptedException e) {
            System.out.println("Server is overloaded"); 
            e.printStackTrace();
        }
Собственно проблема в том, что процессы по всей видимости спорятся. Так как существует массив favorite а передаются значения как то хаотично, либо вообще выполняется один и тот же, причем то первый то второй(возможно потому что пока что массив всего из 3-х значений). Подскажите что я не так делаю или что нужно изменить, или где нужна синхронизация ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.03.2014, 17:59
Ответы с готовыми решениями:

Многопоточность
Здравствуйте, что-то у меня не выходит ... Должно быть так А . . В А . . В А . . В ... и т.д.

Многопоточность
сделать Дизайн приложения, по крайней мере из двух нитей: - Один для обработки массива - Один для написания результатов в файл.из 2...

Многопоточность
Мне нужно что бы сообщение System.out.println(String.format(&quot;%1$s будит парикмахера.&quot;, client.getName())); выводилось только один раз. В...

24
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
02.04.2014, 19:02
Студворк — интернет-сервис помощи студентам
IGROK@,
касательно общего дизайна. Для задач которые выдают результат, лучше использовать Callable<T> вместо Runnable, тогда соотв. Future будет возращать результат.
И не нужно будет извращаться с передачей результатов через стат. структуры.
И не нужен будет отдельный шаг ожидания.
примерно так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Task_Get implements Callable<String>{
   Task_Get(String fav, String text){
      ...
   }
 
   public String call(){
     ....
   }
}
 
List<Future<String>> futures = new ArrayList<Future<String>>();
for (int i=0; i<favorite.length; i++) {   
   futures.add(executor.submit(new Task_Get(favorite[i], text)));
}
for (int i=futures.size();i-->0;) {   
   all_favorite.put(favorite[i], futures.get(i).get());
}
Касательно потоков. Все зависит от памяти, числа процессоров, ОС.
10 000 пока считается очень много. Разумным числом считается порядка 1000.
1
1 / 1 / 1
Регистрация: 05.04.2013
Сообщений: 225
03.04.2014, 00:02  [ТС]
Цитата Сообщение от bigwhitefish Посмотреть сообщение
И не нужен будет отдельный шаг ожидания.
bigwhitefish, Т.е. Вы хотите сказать, что такой метод решения, будет работать быстрее, стабильнее и надежней ? Или это общепринятая модель ?
Цитата Сообщение от bigwhitefish Посмотреть сообщение
Все зависит от памяти, числа процессоров, ОС.
да я буду рад, если будет полностью использоваться моё железо, и получится получить результат хотя бы за 1 секунду. )) Мне нужно найти в 10 массивах содержащих в себе приблезительно по 10 - 15 тыс чаров, совпадение от 3 до 64 значений подряд. Каким образом можно это сделать быстро ? я подумывал запустить в многопоточном режиме сравнение, где каждый поток принимает 3 (или 64) значения которые нужно найти, и сверяет согласно принятому индексу до N-3 (или N-64) (рассуждение теоретическое, не знаю как оно получится и будет ли работать) И таких потоков умножить на 10. Т.е. в итоге должно получится: 10 потоков, внутри которых бежит по 10-15 тысяч ))) Для чего? Нужна скорость. Подскажите или предложите другой вариант, что бы я не наломал дров... )))

Добавлено через 1 минуту
Цитата Сообщение от bigwhitefish Посмотреть сообщение
10 000 пока считается очень много. Разумным числом считается порядка 1000.
мдя... Видимо не разумно я думал.
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
03.04.2014, 10:58
Цитата Сообщение от IGROK@ Посмотреть сообщение
bigwhitefish, Т.е. Вы хотите сказать, что такой метод решения, будет работать быстрее, стабильнее и надежней ? Или это общепринятая модель ?
Сравнение по "стабильнее и надежней" я не приемлю.
Решения бывают корректные и некорректные, бинарная система.
Корректные решения могут быть более или менее красивыми.
Красивые - значит более короткие, читабельные (за исключением случаев, когда применяется какой-то нетривиальный алгоритм), и быстрые. Как правило, не знаю почему, эти качества ходят вместе.

Насчет общепринятости не знаю (среди кого?), но сам предпочитаю- это использовать по максимуму проверенные АПИ, и стремиться к корректности и красоте.

Добавлено через 4 минуты
Цитата Сообщение от IGROK@ Посмотреть сообщение
да я буду рад, если будет полностью использоваться моё железо, и получится получить результат хотя бы за 1 секунду. )) Мне нужно найти в 10 массивах содержащих в себе приблезительно по 10 - 15 тыс чаров, совпадение от 3 до 64 значений подряд.
Тут работы на миллисекунду, если не меньше, для какого нибудь атома. Какие потоки, вы что?
0
1 / 1 / 1
Регистрация: 05.04.2013
Сообщений: 225
03.04.2014, 11:04  [ТС]
Цитата Сообщение от bigwhitefish Посмотреть сообщение
Красивые - значит более короткие, читабельные (за исключением случаев, когда применяется какой-то нетривиальный алгоритм), и быстрые. Как правило, не знаю почему, эти качества ходят вместе.
Спасибо, понял, буду пробовать переписать. ))

Цитата Сообщение от bigwhitefish Посмотреть сообщение
Тут работы на миллисекунду, если не меньше, для какого нибудь атома. Какие потоки, вы что?
подтолкните на мысль, каким методом можно достичь самого быстрого результата ?

Цитата Сообщение от bigwhitefish Посмотреть сообщение
Какие потоки, вы что?
ну я просто осваиваю многопоточность, по этому все мысли только в эту сторону ))
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
03.04.2014, 13:48
Цитата Сообщение от IGROK@ Посмотреть сообщение
подтолкните на мысль, каким методом можно достичь самого быстрого результата ?
По вашему описанию, там простейший однопроходный алгоритм. Размер данных - 150 000 - очень маленький.
Чтобы появился заметный эффект от параллельной обработки, размер данных должен быть хотя бы на 3 порядка больше.
Тогда можно делать обработку каждого массива в в отдельном потоке.

Оптимальное количество потоков в этом случае (т.е. когда узкое место - процессор) равно количеству ядер, включая виртуальные.

Если бы вы получали данные с удаленных серверов, то они и былы бы узким местом, в этом случае оптимальное число потоков - чем больше, тем лучше.

Если вы хотите развиваться, я бы порекомендовал два направления.
1. Воскурить какую-нибудь брахманскую литературу по устройству ОС, какого-нибудь Танненбаума, можно 20-25 летней давности.
2. Постоянно курить Java Memory Model в любых видах, начиная с ее объяснений для чайников. Ссылки найдете сами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.04.2014, 13:48

Многопоточность
Добрый день, уважаемые гуру многопоточного программирование. Если Вас не затруднит, ответьте пожалуйста на несколько вопросов: 1 К...

Многопоточность
Данный код должен в теории выдавать произвольное число (в определенном интервале). У меня четко каждый раз 200 000. В чем ошибка? ...

Многопоточность
Люди, не могли бы вы на пальцах объяснить, что такое пул потоков, а то перечитал тучу статей, а все равно не совсем представляю себе что...

Многопоточность
Доброго времени. Не могу сообразить как сделать: Задача: Методы класса Main вызываются из разных потоков. Нужно получить статистику...

Многопоточность NullPointerException
Кто-нибудь может подсказать, почему при k=2 и z=1 выбрасывается ошибка NullPointerException и как побороть данную проблему? class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»Представленная интегрированная схема описывает непрерывную нелинейную агентно-динамическую модель. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru