mam kilka watkow, ktore zapisuja dane do wspolnego pliku. gdy uzywam obiektu FileOutputStream i strumienia PrintWriter to wychodzi kasza:/. czy istnieje jakis strumien ktory pozwoli na rownoczesny(czyt. kontrolowany) dostep do pliku, czy trzeba samemu o to zadbac?
pzdr.
proponuje stworzyc funkcje zsynchronizowana albo zsynchronizowac strumien ktory uzywasz
ludziska slyszeliscie wy kiedys o czyms takim jak monitor semafor etc... jak nie to radze poczytac gdzies. robi sie kaszana bo dane ida do strumienia z kilku watkow jednoczesnie i mieszaja sie ze soba. a powinno byc tak ze w jednym czasie tylko 1 watek ma dostep do strumienia i tu z pomoca przychodzi monitor albo lock (zaleznie od potrzeb i zastosowania)
Np w c# uzywa sie monitorow do obiektow i semaforow dla zmiennych.
Innymi slowy uzywaj flagi zajetosci strumienia (jakas zmienna) w momencie kiedy jest ustawiona na true to inne watki czekaja z zapisem az bedzie false.
Prostszego sposobu nie znam a na javie sie nie znam... ale jakies takie mechanizmy msuza istniec.
Igorz napisał(a)
Prostszego sposobu nie znam a na javie sie nie znam... ale jakies takie mechanizmy msuza istniec.
Jak wspomniał angus w Javie jest magiczne słówko synchronized
oznaczające że dana metoda lub fragment może być wykonywany tylko przez jeden wątek jednocześnie.
public synchronized void zapiszDoPliku(String co)
{
...
}