1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
|
||||||||||||||||
1 | ||||||||||||||||
Многопоточность и работа с файлами23.10.2019, 23:36. Показов 4767. Ответов 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. Работа с файлами и алгоритмы сортировки Работа с файлами, чтение/работа со строкой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Откуда у float лишние цифры в конце дробной части. Представление чисел с плавающей точкой
bytestream 25.01.2025
При разработке программного обеспечения часто возникает необходимость работать с вещественными числами, которые содержат дробную часть. В современных компьютерных системах такие числа представляются. . .
|
Как использовать глобальную переменную в функции в Python
bytestream 25.01.2025
В программировании на Python глобальные переменные представляют собой особый тип переменных, которые доступны для использования во всех частях программы, включая различные функции, классы и модули. . . .
|
Как в цикле обойти все элементы map в Java
bytestream 25.01.2025
В разработке на Java одной из наиболее востребованных структур данных является интерфейс Map, который предоставляет эффективный способ хранения и управления парами "ключ-значение". Разработчики. . .
|
Для чего нужен UserManager.isUserAGoat() в Android и как это использовать
bytestream 25.01.2025
В мире Android-разработки существует множество интересных и порой загадочных функций, о которых знают далеко не все разработчики. Одной из таких функций является метод UserManager. isUserAGoat(),. . .
|
Как обойти масси в JavaScript. Всё о циклах
bytestream 25.01.2025
JavaScript представляет собой мощный язык программирования, широко используемый в веб-разработке, где массивы и циклы являются фундаментальными концепциями для эффективной работы с данными. Массив в. . .
|
Как сделать, чтобы существующая ветка отслеживала удалённую в Git. Связывание локальных и удалённых веток
bytestream 25.01.2025
В разработке программного обеспечения системы контроля версий стали неотъемлемой частью процесса создания качественного программного продукта. Эти инструменты позволяют разработчикам эффективно. . .
|
Как проверить, что файл НЕ существует с помощью Bash
bytestream 25.01.2025
В системном администрировании проверка существования файлов является фундаментальной операцией, особенно при написании скриптов на Bash. Правильная обработка ситуаций, когда файл отсутствует,. . .
|
Как проверить, что строка пустая, неопределена или null в JavaScript
bytestream 25.01.2025
При разработке веб-приложений на JavaScript разработчики регулярно сталкиваются с необходимостью проверки строковых значений на различные состояния. Валидация данных является критически важным. . .
|
Как проверить существование ключа в объекте или массиве в JavaScript
bytestream 25.01.2025
При разработке веб-приложений на JavaScript программисты постоянно сталкиваются с необходимостью работать с объектами и массивами. Эти структуры данных являются фундаментальными элементами языка и. . .
|
Как создать ArrayList из массива (array) в Java
bytestream 25.01.2025
При разработке программного обеспечения на языке Java программисты часто сталкиваются с необходимостью эффективного управления наборами данных. Массивы и ArrayList являются двумя фундаментальными. . .
|
Как сгенерировать случайные целые числа (int) в указанном диапазоне в Java
bytestream 25.01.2025
В программировании генерация случайных чисел является важнейшим инструментом для решения множества практических задач. От создания игровых механик до реализации алгоритмов машинного обучения, от. . .
|
Как сделать, чтобы grep выводил строки до и после найденной
hw_wired 25.01.2025
Утилита grep стала незаменимым инструментом для поиска и фильтрации информации в Unix-подобных операционных системах. Эта командная утилита позволяет осуществлять поиск строк, соответствующих. . .
|