Dostep do pliku

0

Mam nastepujacy problem. Jeden program (a raczej watek) tworzy plik na dysku (dosc sporych rozmiarow). Drugi program ma przetwarzac te dane (konkretnie kodowac). Powstaje problem z prawem dostepu do pliku, bo kiedy ten drugi chce juz kodowac to ten pierwszy jeszcze nie skonczyl zapisywac informacji. Jak sprawdzic czy inny program zakonczyl juz zapisywanie do pliku (i juz z niego nie korzysta)? Od razu mowie ze rozwiazania typu Sleep(milon sekund) nie wchodza w rachube, zaraz po zakonczeniu zapisywania przez pierwszy program. Do pracy ma przystapic kolejny.

0

Przechwytuj wyjątek który generuje otwieranie zablokowanego pliku czekaj krótką chwilę i próbuj ponownie.
Nie wiem jakie zadanie realizujesz i czy takie rozwiązanie jest najlepsze, ale może powinieneś się zastanowić czy nie lepiej zrobić to kodowanie w strumieniu zapisującym.

0

Najbardziej eleganckm rozwiazaniem sa FileLock. Z pliku (strumienia plikowego lub RandomAccessFile) pobierasz FileChannel, a on ma metody tylu lock, tryLock itp.
Watek zapisujacy pobieta locka, a watek czytajacy probuje dostac sie fo pliku i nie moze, czeka wiec.
Gry pisarz skonczy, robi release na locku i dopiero wtedy czytacz moze sie do niego dostac - czyli pobiera locka, a wtedy pisarz sie nie dostanie do pliku dopoki nie skonczy czytacz.

Klasa FileLock ma na kocu opisu takie cos:
"File locks are held on behalf of the entire Java virtual machine. They are not suitable for controlling access to a file by multiple threads within the same virtual machine.

File-lock objects are safe for use by multiple concurrent threads."

Tego nie czaje, to mozna ich uzywac zeby kontrolowac dostep do pliku roznych watkw czy nie? Moze ktos mi to przetlumaczy bo chyba zle rozumiem te zdania.
Z doswiadczenia wiem (uzywalem tego wielokrotnie) ze takie podjescie zadziala i watki beda ladnie czekac na siebie wzajemnie.

Pozdro.

1 użytkowników online, w tym zalogowanych: 0, gości: 1