Article View: pl.comp.lang.java
Article #125synchronizacja wątków
From: Piotr Piatkowski
Date: Sun, 01 Dec 1996 01:27
Date: Sun, 01 Dec 1996 01:27
44 lines
2638 bytes
2638 bytes
Spodobały mi się ostatnio wątki w Javie, pisząc projekt postanowiłem
zatem je wykorzystać i zrobiłem program wielowątkowy. Jednym z wątków
jest coś co nazywam ServerReader, co czyta dane z serwera, wrzuca do
bufora (Vector) i udostępnia innym wątkom. Chodzi o taki inteligentny
bufor - ponieważ dane z serwera są wykorzystywane w sposób ciągły, a
serwer wysyła je porcjami między którymi pojawiają się dłuższe
przerwy.
I teraz tak - żeby nie zajmować niepotrzebnie czasu procesora, w
momencie gdy czytacz stwierdzi że bufor jest pełny (czyli nie ma nic
do roboty), robi po prostu Thread.currentThread.suspend().
Inny wątek, wywołujący funkcję ServerReader.getNextLine() po
odczytaniu z bufora linii (czyli zrobieniu miejsca na kolejną)
wywołuje ServerReader.thread.resume(), po czym ServerReader może
zapisać nowe dane do bufora (bufor oczywiście ma strukturę FIFO).
W zasadzie jest to klasyczny przykład producent/konsument, ze
skończonym buforem.
Działa to bardzo ładnie, ale jest jeden problem - Netscape strasznie
się pluje z komunikatami:
Warning: Thread.suspend() was called; Navigator deadlock might result
Wydaje mi się że pluje się niesłusznie, bo suspend robię na własnym
wątku a nie na wątku głównym appleta (kiedy to faktycznie mógłbym
doprowadzić do deadlocku Navigatora). Niemniej jednak bardzo mnie to
denerwuje. I tutaj pytanie - czy ktoś widzi inne rozwiązanie, np. z
zastosowaniem funkcji wait()/notify()? Jak dla mnie działanie
wait/notify to ciągle "heavy wizardry"... Odnoszę wrażenie jakby
te funkcje nie były do końa udokumentowane, albo raczej są, ale
wszędzie po trochu i trochę inaczej :-)
Przy okazji - znalazłem gdzieś w przykładach taką konstrukcję:
synchronized(this){
...
}
Domyślam się że jest to odpowiednik funkcji synchronized, ale do
czego służy parametr?
--
Piotr Piątkowski, Uczelniane Centrum Informatyki, AGH Krakow, POLAND
Technical Details
Message-ID:
<57qmu4$fe4@galaxy.uci.agh.edu.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.nask.pl!uw.edu.pl!cyfronet!galaxy.uci.agh.edu.pl!galaxy.uci.agh.edu.pl!newsShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.nask.pl!uw.edu.pl!cyfronet!galaxy.uci.agh.edu.pl!galaxy.uci.agh.edu.pl!news From: kompas@galaxy.uci.agh.edu.pl (Piotr Piatkowski) Newsgroups: pl.comp.lang.java Subject: synchronizacja wątków Date: 1 Dec 1996 02:27:32 +0100 Organization: University of Mining & Metallurgy Lines: 44 Message-ID: <57qmu4$fe4@galaxy.uci.agh.edu.pl> NNTP-Posting-Host: galaxy.uci.agh.edu.pl Mime-Version: 1.0 X-Newsreader: TIN [UNIX 1.3 unoff BETA release 960713] Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit