1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
|
||||||||||||||||
1 | ||||||||||||||||
Многопоточность и работа с файлами23.10.2019, 23:36. Показов 4738. Ответов 15
Метки нет (Все метки)
Здравствуйте. Поставили задачу, реализовать приложение у которого:
Имеется 3 потока, а также 2 файла 1 поток записывает каждую секунду некоторое случайное число в файл journal_1.txt 2 поток просматривает каждую секунду файл journal_1.txt и записывает сумму последних двух записанных в этот файл чисел в файл journal_2.txt 3 поток просматривает каждую секунду файл journal_2.txt и записывает сумму последних двух записанных в этот файл в файл journal_1.txt С потоками знаком плохо, потому возникли проблемы с реализацией. Попробовал сделать 3 класса под 3 потока, который как-то пытались реализовать поставленную задачу. Однако, пока что правильно отрабатывает лишь 1 поток. Второй класс некорректно забирает данные из файла journal_1.txt Исходный код основного класса
0
|
23.10.2019, 23:36 | |
Ответы с готовыми решениями:
15
Многопоточность при работе с файлами Работа с файлами , хотелось бы с windows system файлами Многопоточность и работа с COM-портом Многопоточность и работа с прокси |
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
|
|
24.10.2019, 15:52 [ТС] | 3 |
sleep вызывается, чтобы в файл записывались значения через каждую 1 с., а не через каждые микросекунды. Что значит оборачивать их в Thread? Разве Runnable не производит этого?
0
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
24.10.2019, 16:12 | 5 |
0
|
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
|
||||||
25.10.2019, 00:43 [ТС] | 6 | |||||
Gungala
Вы имеете ввиду сделать такую конструкцию?
0
|
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
|
|
25.10.2019, 10:06 [ТС] | 8 |
Gungala
Спасибо, теперь тогда вопрос по самой работе программы. Первый класс все хорошо делает, добавляет в journal_1.txt какие-то цифры каждую секунду. Проблема возникает со вторым классом (реализовывать 3-ий не было смысла, ибо он аналогичен, как я понял 2-ому, только проверять будет уже journal_2.txt). Каждый раз при отработке метода start у второго класса, он кидает полностью обновленный список в journal_1.txt Например, 1 поток закинул в 1 файл цифры: 1 1 2 3 Второй поток выводит следующее: 2 2 3 2 3 5 Полагаю, что косяк в постоянном пересоздании ArrayList, но как решать подобный траб не понимаю. Есть ли способ, например, как-то достать именно последние 2 строки в файле, при этом не закрывая его?
0
|
25.10.2019, 11:17 | 9 | |||||
Как вариант
0
|
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
|
||||||
25.10.2019, 13:50 [ТС] | 10 | |||||
Gungala
Компилятор кричит на ошибку в строчке.
0
|
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
|
|||||||||||||||||||||
26.10.2019, 02:18 [ТС] | 12 | ||||||||||||||||||||
Gungala
Попытался сделать следующим образом: Основной класс программы
Класс, отвечающий за первый поток
1) Если делать класс 3, аналогичный классу 2, просто поменяв названия файлов, то возникает ошибка (когда оба файла пустые); 2) При повторном перезапуске программы 2 поток начинает суммировать все числа из файла text.txt заново, вместо того, чтобы продолжить просто вносить изменения. Как можно решить данные проблемы? Добавлено через 8 минут Класс, отвечающий за 3 поток соответственно:
0
|
26.10.2019, 11:05 | 13 | |||||
Сообщение было отмечено W014ara как решение
Решение
В общем, я потратил достаточно много времени, но так и не смог сделать ничего умного, поэтому пришлось делать то, что работает. При каждой итерации второй поток с самого начала читает файл. Стрёмненько, но иначе никак сделать у меня не вышло
1
|
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
|
|
26.10.2019, 14:06 [ТС] | 14 |
Gungala
Спасибо большое, да, отрабатывает именно так, как нужно. Добавлено через 30 минут Gungala Единственное, хотел дополнительно спросить, как можно будет синхронизировать мои три потока? Чтобы они отрабатывали именно в порядке 1 2 3, а не, например 1 3 2?
0
|
26.10.2019, 15:29 | 15 |
Не совсем понимаю, зачем использовать многопоточность, если нужно последовательное выполнение. Не знаю, если честно, я сам в этом деле почти не имею опыта. Возможно, BlockingQueue подошла бы, погугли
0
|
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
|
|
26.10.2019, 16:16 [ТС] | 16 |
Понимаю, что можно обойтись без многопоточности, но так поставили задание. Спасибо за помощь, еще раз!
0
|
26.10.2019, 16:16 | |
26.10.2019, 16:16 | |
Помогаю со студенческими работами здесь
16
Многопоточность, не правильная работа с мютекосом. Что не так? Работа с файлами(Запись,чтение,работа с данными) Лабораторная работа №5. Работа с файлами и алгоритмы сортировки Работа с файлами, чтение/работа со строкой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |