Этот вопрос немного сложный, но я сделаю все возможное, чтобы сделать его простым.Запуск многопоточной программы, синхронизированной очень медленно Java
У меня есть программа, которую я хочу запустить многопоточным.
Это то, что программа делает:
- инициализирует исполняемый (командной строки утилиты)
- загружает файл в исполняемый файл (файлы предоставляются из метода поставщика данных)
- посылает команды, которые исполняемый файл на основе файла, который был загружен
- анализирует полученные ответы от исполняемых
- записывает результаты в файл CSV
Все это имеет место одним способом.
Однако при работе в многопоточном режиме все работает отлично, за исключением того, что все результаты, записанные в файл csv, являются неправильными и неработоспособными.
Однако, когда я добавил ключевое слово sychronized в объявлении метода и запустил программу с несколькими потоками, программа работает нормально.
public sychronized void run(Dataprovider data) {
...
}
Однако программа работает с такой же скоростью, как если бы я работал в режиме одиночного потока. Как я могу это исправить? Это сводит меня с ума ...
Как я могу запустить эту программу правильно многопоточно?
Я ищу идеи и/или руководства
Edit:
Однако при работе в многопоточном режиме, все работает отлично, за исключением , все результаты, записываемые в файл CSV являются неправильный и из заказ.
Загрузите файл в исполняемый файл, я запустил некоторые вычисления в этом файле, а затем сохранил его. Затем я получаю размер файла в байтах (file.length) для этого вновь созданного файла. Я сравниваю результаты этого нового файла со старым файлом (файл, который был загружен), и я вижу, что новый файл меньше старого (что совершенно неправильно). Размеры файлов для нового файла последовательно 12263 байт, что неправильно
Edit:
Вот неполный код, который делает написание в CSV-файл:
Edit: Удаление пример кода для простоты
Зависит от того, что означает «все результаты, записанные в файл csv, являются неправильными и не соответствуют требованиям». –
как вы работаете в многопоточном режиме? я бы ожидал, что при работе в многопоточном режиме все результаты не соответствуют порядку - как только несколько потоков запущены, они не выполняются в любом предсказуемом порядке. –
@JoeC Как только я загружаю файл в исполняемый файл, я запускаю некоторые вычисления в этом файле, а затем сохраняю его. Затем я получаю размер файла в байтах (file.length) для этого вновь созданного файла. Я сравниваю результаты этого нового файла со старым файлом (файл, который был загружен), и я вижу, что новый файл меньше старого (что совершенно неправильно). –