![]() |
|
Модераторы: Poseidon |
![]()
|
|
| bulat01 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 26.10.2010 Репутация: нет Всего: 0 |
привет всем,
помогите реализовать логику Есть приложение для загрузки документов в систему, читая данные из эксель шита. строка за строкой.
Как разбить программу на потоки - к примеру 9 строк в шите. При запуске программы - 3 потока (threads) обрабатывают 3 строки thread1 sleep(500); - > обработка 1 строки thread2.sleep(600); - > обработка 2 строки thread3.sleep(700); - > обработка 3 строки как thread1 заканчивается - видит 2 и 3 потоки заняты - начинает обрабатывать 4 строку. как thread2 заканчивается - видит 3 и 4 потоки заняты - начинает обрабатывать 5 строку. как thread3 заканчивается - видит 4 и 5 потоки заняты - начинает обрабатывать 6 строку. и так далее пока не обработают все строки. Я читал что может конфликт - если главный поток завершится чем дочерний. Как сделать чтобы этого конфликта не было. Может кто уже встречался с подобной задачкой. Добавлено через 14 минут и 4 секунды забыл упомянуть - указанный цикл находится в методе doLoadCompany. Если это имеет значение. |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
вместо "for (int r = 1; r < rows_number; r++) {"
вынести "int m_r" в поле класса. и инкрементить её в блоке
После того, как узнал значение rows_number, насоздавать потоков, и потом для всех них t.join() Это сообщение отредактировал(а) leniviy - 10.2.2012, 13:25 |
|||
|
||||
| bulat01 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 26.10.2010 Репутация: нет Всего: 0 |
Спасибо leniviy за ваш ответ.
Я приатачил исходный код - вы не могли пояснить в деталях. просто там еще присутствует Прогресс Бар - который отображает прогресс в зависемости от обработанной строки. на сколько обработано - на столько и показывает прогресс - например 10 строк в excel шите - 5 строк обработано (в Прогресс баре показывает 50%). Можно ли сделать так чтобы он автоматом выделял потоков сколько нужно. А что если в шите будет мало строк - к примеру 1 или 2, как он будет действовать в этом случае? С уважением! Присоединённый файл ( Кол-во скачиваний: 5 )
DataLoadingCompany.java 18,47 Kb |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Эту задачу нельзя распараллелить, потому что сначала данные читаются из sheet_load, а потом записываются в него же. Вот если бы между чтением и записью была ресурсоемкая логика, то ещё можно было что-нибудь придумать.
Это сообщение отредактировал(а) leniviy - 10.2.2012, 14:56 |
|||
|
||||
| bulat01 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 26.10.2010 Репутация: нет Всего: 0 |
synchronized(lock) {
-- за что отвечает lock? как его прописать? Добавлено через 8 минут и 3 секунды В любом случае, большое спасибо leniviy. Что вы имеете в виду под ресурсоемкой логикой? Эту задачу нельзя распараллелить - значит ли это то, что задачи должны быть полностью независимы друг от друга? |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
может вам лучше в центр помощи обратиться?
|
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 1 Всего: 75 |
Для домашних заданий, курсовых, существует "Центр Помощи".
Тема перенесена! -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |