![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Lisus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 21.10.2007 Репутация: нет Всего: 2 |
Задача такова: сделать приложение, которое может запускаться одновременно несколько раз, ну как Блокнот типа.
Программа должна работать с жестким диском. При каких-нибудь сбоях в файл error.txt записывается происшествие. Предположим 2 программы одновременно получат отказ от чтения из файла, тогда они обе (одновременно) должны открыть еррорный файл на запись. Получается что одна программа запишет в файл ошибку, а другая получит отказ на запись в занятый файл. Как обойти такую "редкую", но теоритический возможную ситуацию? Статик переменные здесь не прокатят, они разные для разных программ. Синхронизировать на еррорную запись не получается, т.к. я не знаю, как можно сделать объект (по которому будет проводиться синхронизация) общим. Есть же какие-нибудь возможности для этого. Ну скажем можно же запретить второй программе запускаться есть запущена первая, значит должна быть возможность и наладить диалог между 2-мя программами. Как решается эта проблема? |
|||
|
||||
| integral |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.7.2006 Где: Dnipropetrovs' ;k, Ukraine Репутация: нет Всего: нет |
не факт, что это то что нужно, но мне придумалось такое:
если оба получили отказ на запись в ерорный файл, то каждый поток нужно уложить спать на рандобное время, например, от 0,01с до 1с. Ну и так повторять - вряд ли у тебя будут совпадать время сна |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Можно сделать так (запустить надо экземпляра 3-4):
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Lisus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 21.10.2007 Репутация: нет Всего: 2 |
2 integral
Ну это конечно не полное решение, но это сильно понижает вероятность одновременного доступа, что тоже результат. |
|||
|
||||
| Lisus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 21.10.2007 Репутация: нет Всего: 2 |
2 LSD, ЛС - это исключение, больше не буду.
Т.е. можно установить блок на файл? Я почему-то думал, что если файл занят, то блок TRY прервется в месте создания стрима 21: FileOutputStream out = new FileOutputStream(errorLogFile, true); Т.е. это одна из ситуаций когда файл на запись не доступен. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Да, но это гарантирует только то, что другое Java приложение не сможет поставить лок. Не гарантируется, что этот лок будет действовать и на обычные приложения в системе.
Нет, тут он не прервется. Таким образом можно организовать взаимодействие межде приложениями, через memory mapped files. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Lisus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 21.10.2007 Репутация: нет Всего: 2 |
Получается, что работа с файлом одной программы(открыт на запись) не конфликтует с записью в этот же файл другой программой.
Т.е. - программа а) открывает на запись файл - программа б) открывает на запись тот же файл - программа а) записывает "123" - программа б) записывает "456" - программа а) записывает "789" - программа б) закрывает файл - программа а) закрывает файл И выходит всё работать будет???? Никаких ерроров??? Никаких конфликтов, ну кроме того, что в файле будут только записи программы а) (записи б) должны затереться). т.е. хрестиматийный способ работы с файлом:
не защищает от параллельной работы с одним файлом нескольких приложений??? |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |